场景:有两个视图view1和view2,在view1上取一个point,并且这个点在view1上的坐标(以view1左上角为0, 0点)是知道的,那么如何能算出这个点以view2左上角为0,0点的坐标值呢?有两种方法:
- 根据view1、view2的frame,结合point的坐标自己手动计算。(这种方法这里就不说了)
- 苹果提供了api, 通过调用苹果的提供的api就能直接帮我们算出结果。
通过事例学习这四个函数的使用:(耐心看完这个例子和注释,确保你能学会,_)
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点) 转换成在 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点) 转换成在 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点) 转换成在 blueView中的坐标(blueView左上角为0,0点)
let posInView2 = redView.convert(greenView.frame.origin, to: blueView) // (40, 40)
print("x: \(posInView2.x), y: \(posInView2.y)")
// CGRect转换和point转换一个原理,其实就是转换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}}
}
}