iOS坐标转换(CGPoint、CGRect)

场景:有两个视图view1和view2,在view1上取一个point,并且这个点在view1上的坐标(以view1左上角为0, 0点)是知道的,那么如何能算出这个点以view2左上角为0,0点的坐标值呢?有两种方法:

  1. 根据view1、view2的frame,结合point的坐标自己手动计算。(这种方法这里就不说了)
  2. 苹果提供了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}}
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容