W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
????之前提到過,視圖的center
屬性和圖層的position
屬性都指定了anchorPoint
相對于父圖層的位置。圖層的anchorPoint
通過position
來控制它的frame
的位置,你可以認為anchorPoint
是用來移動圖層的把柄。
????默認來說,anchorPoint
位于圖層的中點,所以圖層的將會以這個點為中心放置。anchorPoint
屬性并沒有被UIView
接口暴露出來,這也是視圖的position屬性被叫做“center”的原因。但是圖層的anchorPoint
可以被移動,比如你可以把它置于圖層frame
的左上角,于是圖層的內(nèi)容將會向右下角的position
方向移動(圖3.3),而不是居中了。
圖3.4 組成鐘面和鐘表的四張圖片
????鬧鐘的組件通過IB來排列(圖3.5),這些圖片視圖嵌套在一個容器視圖之內(nèi),并且自動調(diào)整和自動布局都被禁用了。這是因為自動調(diào)整會影響到視圖的frame
,而根據(jù)圖3.2的演示,當視圖旋轉(zhuǎn)的時候,frame
是會發(fā)生改變的,這將會導致一些布局上的失靈。
????我們用NSTimer
來更新鬧鐘,使用視圖的transform
屬性來旋轉(zhuǎn)鐘表(如果你對這個屬性不太熟悉,不要著急,我們將會在第5章“變換”當中詳細說明),具體代碼見清單3.1
圖3.6 鐘面,和不對齊的鐘指針
????你也許會認為可以在Interface Builder當中調(diào)整指針圖片的位置來解決,但其實并不能達到目的,因為如果不放在鐘面中間的話,同樣不能正確的旋轉(zhuǎn)。
????也許在圖片末尾添加一個透明空間也是個解決方案,但這樣會讓圖片變大,也會消耗更多的內(nèi)存,這樣并不優(yōu)雅。
????更好的方案是使用anchorPoint
屬性,我們來在-viewDidLoad
方法中添加幾行代碼來給每個鐘指針的anchorPoint
做一些平移(清單3.2),圖3.7顯示了正確的結(jié)果。
清單3.2
- (void)viewDidLoad
{
[super viewDidLoad];
// adjust anchor points
self.secondHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.minuteHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.hourHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
// start timer
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: