為IOS開發引入錨點?

Tags: 位置, 視圖, 錨點,

在進行ios開發的時候,用不慣它的很多東西,比如說view的位置和大小沒有辦法單獨設置,而要一起初始化位置和大小,感覺非常的麻煩,可能因為喬布斯本人就是一個非常彆扭的人吧。而在cocos2d裡就非常方便,因為cocos2d的錨點可以很方便地設置子視圖的位置,而ios裡並沒有錨點這個概念。所以我把cocos2d的錨點移植到了ios裡,並對其做了一些修改,使其成為了有著ios特色的錨點。

為IOS開發引入錨點

方法/步驟

cocos2d中採用的是OpenGL ES座標系,座標原點在屏幕左下角。而ios採用Quartz 2D座標系,座標原點在屏幕左上角。在cocos2d和ios中分別把視圖的座標點設為(10,10),結果如下:

為IOS開發引入錨點

為IOS開發引入錨點

因為cocos2d的視圖是將視圖的中心點位置設置為座標點的,而ios中的視圖則是以左上角位置來設置為座標點的。下面舉例說明,請看下圖

為IOS開發引入錨點

創建兩個視圖,藍色視圖左上角在座標(5,4)處,而橙色視圖右邊和藍色視圖對齊,有一半的高度處於藍色視圖外面。那麼如果按照ios標準的創建視圖的寫法,代碼可以這樣寫:

為IOS開發引入錨點

可以看出如果創建視圖就要計算出視圖左上角的座標,可以說非常的麻煩。而如果引入錨點的話,代碼就可以這樣寫:

為IOS開發引入錨點

錨點的取值範圍是[0, 1]

所以可以說:錨點是子視圖用來設置位置的一個定位點,使用錨點就不會用子視圖的寬高參與計算,省去了麻煩的計算,從而讓代碼更優雅。

為IOS開發引入錨點

先初始化視圖大小,然後設置視圖的位置。這樣橙色視圖的座標點就是(W, H),錨點是(1, 0.5),通過這兩個點就可以設置視圖的準確位置了,根本就不用去費勁計算橙色子視圖的左上角的座標了。

為IOS開發引入錨點

設置一個子視圖的座標時,錨點(0, 0)表示把子視圖的左上角放到該座標的位置,錨點(0.5, 0.5)表示把子視圖的中點放到該座標的位置。

通過category為UIView添加設置錨點的方法,所有view的子類就可以使用該方法。類裡面自定義了一些獲取和設置view的大小和位置的方法。代碼裡通過self.width就能取到view的寬度了,而不用寫self.frame.size.width。通過代碼也可以清楚地知道:實現錨點的方法其實很簡單,就是在setPosition:atAnchorPoint:方法裡面利用錨點和子視圖的寬高進行計算,從而調整了子視圖的位置。

為IOS開發引入錨點

相關問題答案