2014-03-14 32 views
3

最近,我使用動畫UIImageView自定義UITableViewCell來播放動畫GIF。在製作它的過程中,我發現在單元重新使用後不會顯示動畫。 看來UIImageView受[self prepareForReuse]的影響。當我調試它時,我可以得到以下信息。爲什麼在調用[super prepareForReuse]後,UIImageView中的「動畫」屬性在自定義UITableViewCell上被刪除?

** before calling [super prepareForReuse] ** 
(lldb) po self.testImageView 
<UIImageView: 0x1ab681c0; frame = (39 0; 78 61); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; animations = { UIImageAnimation=<CAKeyframeAnimation: 0x1ab77870>; }; layer = <CALayer: 0x1ab68b60>> - (null) 

** after calling [super prepareForReuse] ** 
(lldb) n 
(lldb) po self.testImageView 
<UIImageView: 0x1ab681c0; frame = (39 0; 78 61); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x1ab68b60>> - (null) 

正如它所顯示的,「動畫= {UIImageAnimation =;};」已移除。

幸運的是,我可以通過製作一個UIImage的新實例並將其設置爲UIImageView作爲解決方法來解決該問題。爲了解決這個問題,重新創建一個UIImage實例不是爲了重用已經設置爲UIImageView的實例。

無論如何,我真正想知道的是爲什麼prepareForReuse方法刪除有關動畫的信息。 請讓我知道隱藏方法的內部重用邏輯。

回答

0

致電[super prepareForReuse]stopAnimationself.testImageView上被調用。我認爲這是正確的邏輯使用,以便細胞可以重複使用。一旦單元準備重新使用,您只需調用[self.testImageView startAnimation]方法即可。您不必訴諸於您提到的「解決方法」方法。

+0

我已經做了,但沒有工作。似乎關於動畫的信息被刪除了。所以,雖然我在'prepareForReuse'之後調用了'startAnimating',但它不起作用。 –

+0

@KyokookHwang我試過這個,我似乎沒有得到你提到的問題。我在'[super prepareForReuse]'之後的圖像視圖中調用了'startAnimation'方法,它似乎工作正常。 – Adithya

+0

@KyokookHwang一旦我開始動畫,imageview'animatingImages'數組中的'UIImage'實例也完好無損。 – Adithya

相關問題