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