Swift 座標轉換的方法

好心人跟我說這個常用,要會哦!所以我自己研究一下了

首先,要先清楚UIKit座標系統(0,0)於左上角,CoreGraphics座標系統的(0,0)在左下角。

再來是

。frame:在superView的座標系位置(在父的座標系裡位置)。bounds:在自身座標系位置

以粉色View為例,

pinkView.frame 以父橘色座標系,會得到(10,10,5,5)

pinkView.bounds 以自身粉色座標系,會得到(0,0,5,5)

//(10,10,5,5) → (x, y, width, height)

了解以上,問題是如果想知道粉色在黃色爺爺的座標呢?

用frame可以知道在父的座標,但無法知道在黃色爺爺的座標系裡的位置,

故我們可以透過func轉換得知

。轉換新座標中矩形

func convert(CGRect, to: UIView?) -> CGRect故:let pinkFrame = pinkView.convert(pinkView.frame!,  to: yellowView)
pinkFrame = (20,20,5,5)

方法是「子使用」,to:父, 獲取子在父的座標
新座標矩形 = 子.convert(子.frame, to: 父)
func convert(CGRect, from: UIView?) -> CGRect故:let pinkFrame = yellowView.convert(pinkView.frame!,  from: pinkView)
pinkFrame = (20,20,5,5)
方法是「父使用」,from:子 ,獲取子在父的座標
新座標矩形 = 父.convert(子.frame, from: 子)

。轉換座標

func convert(CGPoint, to: UIView?) -> CGPoint
pinkFrame = (20,20)
func convert(CGPoint, from: UIView?) -> CGPoint
pinkFrame = (20,20)

其實以上這幾種方法都通用,都可以得知粉色在黃色爺爺的座標系的座標或是矩形資訊,只要不要搞混填錯參數,基本上還滿容易理解的。

可以運算有效範圍或是移動元件等等。

可以幫我點個讚,或是分享一杯咖啡支持我。

--

--

奇妙仙子
彼得潘的 Swift iOS / Flutter App 開發教室

When you want something, all the universe conspires in helping you to achieve it.