場景:有兩個視圖view1和view2驳概,在view1上取一個point,并且這個點在view1上的坐標(以view1左上角為0, 0點)是知道的邪码,那么如何能算出這個點以view2左上角為0,0點的坐標值呢?有兩種方法:
- 根據(jù)view1、view2的frame只锭,結(jié)合point的坐標自己手動計算。(這種方法這里就不說了)
- 蘋果提供了api, 通過調(diào)用蘋果的提供的api就能直接幫我們算出結(jié)果院尔。
通過事例學習這四個函數(shù)的使用:(耐心看完這個例子和注釋蜻展,確保你能學會,_)
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中的某個點坐標(redView左上角為0,0點) 轉(zhuǎn)換成在 view中的坐標(view左上角為0,0點)
let posInView = view.convert(greenView.frame.origin, from: redView) // (140, 140)
print("x: \(posInView.x), y: \(posInView.y)")
// redView中的某個點坐標(redView左上角為0,0點) 轉(zhuǎn)換成在 view中的坐標(view左上角為0,0點)
let posInView1 = redView.convert(greenView.frame.origin, to: view) // (140, 140)
print("x: \(posInView1.x), y: \(posInView1.y)")
// redView中的某個點坐標(redView左上角為0,0點) 轉(zhuǎn)換成在 blueView中的坐標(blueView左上角為0,0點)
let posInView2 = redView.convert(greenView.frame.origin, to: blueView) // (40, 40)
print("x: \(posInView2.x), y: \(posInView2.y)")
// CGRect轉(zhuǎn)換和point轉(zhuǎn)換一個原理邀摆,其實就是轉(zhuǎn)換CGRect的origin, size是不會變的
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}}
}
}