2010-12-17 45 views
0

我具有其中一堆層的定位的方法,和一個單一的「活化的」層(基本上,該用戶點擊了的層)動畫層大小的塊動畫兩者定位並在調整大小後同時。所有圖層,包括激活圖層都是較大圖層的子圖層。這是我的方法:CALayer的 - 從運行

[CATransaction begin]; 
    [CATransaction setValue:[NSNumber numberWithFloat:0.7] 
        forKey:kCATransactionAnimationDuration]; 
    }]; 
    for (CALayer *layer in self.inactiveLayers) { 
     ... do some positioning ... 
    } 
    CGRect newFrame = activeLayer.frame; 
    newFrame.origin.x = 50.0; 
    newFrame.origin.y = 50.0; 
    newFrame.size.width = 100.0; 
    newFrame.size.height = 100.0; 
    activeLayer.frame = newFrame; 
    [CATransaction commit]; 

我遇到的問題真的很奇怪。使用上面的代碼,沒有一個動畫運行(甚至不是非活動層的動畫)。但只要我註釋掉設置的新的幀的大小和寬度的線條,動畫奇蹟般地重新開始工作。

是否有任何理由這應該是這樣嗎?

回答

1

找出問題了,我在佈局管理器上設置了圖層的超層,我嘗試動畫,佈局代碼(重置圖層的大小)在圖層邊界發生變化時被調用。在動畫期間禁用佈局管理器解決了問題。

+0

你有它!我正在考慮該文檔,並且我知道您可以在CAScrollLayer的框架中爲動畫製作動畫。奇怪的。 – 2010-12-19 05:13:20

0

這是因爲一個的CALayer的框架屬性不是動畫。改爲使用bounds屬性,位置動畫將順利運行。

+0

如果你想知道爲什麼位置動漫作品對自己,即使要更改的框架原點(這是不是一個animatble屬性)這是因爲框架從邊界和位置屬性,其中*計算是*兩個動畫。該幀被計算,而不是被存儲。 http://developer.apple.com/library/mac/ipad/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html%23//apple_ref/occ/instp/CALayer/frame – 2010-12-17 15:48:26

+0

我認爲幀不一個明確的動畫屬性,但仍然適用於隱式動畫。這是我過去的經驗(設置框架屬性會自動將圖層動畫化爲其新框架)。只是爲了確認,我試圖將圖層的邊界設置爲我想要的大小,但它仍然不起作用。 – indragie 2010-12-17 23:13:48