場(chǎng)景:有兩個(gè)視圖view1和view2,在view1上取一個(gè)point,并且這個(gè)點(diǎn)在view1上的坐標(biāo)(以view1左上角為0, 0點(diǎn))是知道的,那么如何能算出這個(gè)點(diǎn)以view2左上角為0,0點(diǎn)的坐標(biāo)值呢?有兩種方法:
- 根據(jù)view1、view2的frame,結(jié)合point的坐標(biāo)自己手動(dòng)計(jì)算。(這種方法這里就不說了)
- 蘋果提供了api, 通過調(diào)用蘋果的提供的api就能直接幫我們算出結(jié)果。

通過事例學(xué)習(xí)這四個(gè)函數(shù)的使用:(耐心看完這個(gè)例子和注釋,確保你能學(xué)會(huì),_)

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let blueView = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 200))
blueView.backgroundColor = UIColor.blue
view.addSubview(blueView)
let redView = UIView(frame: CGRect(x: 120, y: 120, width: 100, height: 100))
redView.backgroundColor = UIColor.red
view.addSubview(redView)
let greenView = UIView(frame: CGRect(x: 20, y: 20, width: 50, height: 50))
greenView.backgroundColor = UIColor.green
redView.addSubview(greenView)
// redView中的某個(gè)點(diǎn)坐標(biāo)(redView左上角為0,0點(diǎn)) 轉(zhuǎn)換成在 view中的坐標(biāo)(view左上角為0,0點(diǎn))
let posInView = view.convert(greenView.frame.origin, from: redView) // (140, 140)
print("x: \(posInView.x), y: \(posInView.y)")
// redView中的某個(gè)點(diǎn)坐標(biāo)(redView左上角為0,0點(diǎn)) 轉(zhuǎn)換成在 view中的坐標(biāo)(view左上角為0,0點(diǎn))
let posInView1 = redView.convert(greenView.frame.origin, to: view) // (140, 140)
print("x: \(posInView1.x), y: \(posInView1.y)")
// redView中的某個(gè)點(diǎn)坐標(biāo)(redView左上角為0,0點(diǎn)) 轉(zhuǎn)換成在 blueView中的坐標(biāo)(blueView左上角為0,0點(diǎn))
let posInView2 = redView.convert(greenView.frame.origin, to: blueView) // (40, 40)
print("x: \(posInView2.x), y: \(posInView2.y)")
// CGRect轉(zhuǎn)換和point轉(zhuǎn)換一個(gè)原理,其實(shí)就是轉(zhuǎn)換CGRect的origin, size是不會(huì)變的
let frameInView = redView.convert(greenView.frame, to: view)
print(NSStringFromCGRect(frameInView)) // {{140, 140}, {50, 50}}
let frameInView1 = blueView.convert(greenView.frame, from: redView)
print(NSStringFromCGRect(frameInView1)) // {{40, 40}, {50, 50}}
}
}