iOS坐標(biāo)轉(zhuǎn)換(CGPoint、CGRect)

場(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)值呢?有兩種方法:

  1. 根據(jù)view1、view2的frame,結(jié)合point的坐標(biāo)自己手動(dòng)計(jì)算。(這種方法這里就不說了)
  2. 蘋果提供了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}}
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容