3.2 錨點(diǎn)

2018-02-24 14:50 更新

錨點(diǎn)

????之前提到過(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
}

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)