2011-05-13 45 views
1

我已經遇到了一點在我的代碼中的障礙。我正在使用OpenFlow-目前爲開發者免費提供的Apple coverflow替代品。在演示中,一切似乎都很好。 「流動」是通過使用UIView動畫動畫。如何禁用「隱式」或自動動畫

我已經適應了演示在iPad上工作。除了由於某種原因,這些視圖隱含地進行動畫以外,一切都運作良好。我無法弄清楚這是爲什麼。我甚至沒有想過隱式動畫在iOS中可用。

我真的可以使用一些幫助來弄清楚爲什麼這首先發生,以及我如何禁用它們。

+0

可能重複的[如何禁用CALayer隱式動畫?](http://stackoverflow.com/questions/5833488/how-to-disable-calayer-implicit-animations) – Warpling 2015-08-03 00:57:18

回答

2

好吧,很多令人頭痛的事情,後來又浪費了很多時間,我想出了我的代碼中究竟發生了什麼。我以爲我正在體驗隱含的動畫,但我無法弄清楚爲什麼這一切都會突然發生。

我決定我最好試着理解隱式動畫,所以我嘗試着自己去想出如何在受控狀態下實現它們。我從未見過隱式動畫的原因是因爲我總是使用UIView或它的一個子類。

我瞭解到,如果您從CALayer開始並嚴格按照圖層工作,則許多屬性的所有更改都會隱式生成動畫。

當你看到UIView的(和他們的後代)全部自動分層支持並且有一個CALayer屬性時,可能會有一些混淆(我知道對我有用)。不過,顯然UIView以某種方式覆蓋了其CALayer屬性的隱式動畫機制。所以,如果你想隱式動畫,你必須直接使用CALayer,而不僅僅是假設因爲UIView有一個CALayer屬性,它將表現相同。

至於我遇到的錯誤......這也許是我遇到過的最奇怪的一個。無論我嘗試過什麼,所有的東西都是在沒有任何動畫代碼的情況下對值進行動畫修改。罪魁禍首最終是一個嵌套的UIView動畫塊。

通知如下,看看你是否抓住問題馬上:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.2]; 
//animate something 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDelay:.8]; 
[UIView setAnimationDuration:.4]; 
//animate something else 
[UIView commitAnimations]; 

我未能終止與另一[UIView的commitAnimations]嵌套塊。這實際上是在我的程序中泄漏了動畫。一切都是動畫,即使代碼完全不同的類。這個bug被壓扁了......接下來!