2011-05-06 135 views
0

我正在做一些測試,試圖想出將最小的動畫添加到UIImageView中的最佳方法。Iphone動畫最佳實踐

下面的代碼正在工作,但是當第一次調用時,我猜測動畫正在加載時出現延遲。我應該如何加載動畫來避免這種延遲?當第二次呼叫時,它立即開始。此代碼位於 - (void)loadView方法和[animation startAnimating]中;從自定義方法調用。 注意:UIImageView *動畫實際上是一個實例var。

NSString *imageName; 
NSMutableArray *animImages = [[NSMutableArray alloc]init]; 

for(int i = 0; i <= 40; i++) { 
    imageName = [NSString stringWithFormat:@"frame_%d.png", i]; 
    [animImages addObject:[UIImage imageNamed:imageName]]; 
} 

UIImageView *animation; // is actually an instant var declared in header. 

animation = [[UIImageView alloc]initWithFrame:CGRectMake(50, 0, 600, 300)]; 
animation.animationImages = animImages; 
animation.animationDuration = 2; 
animation.animationRepeatCount = 1; 

我需要在同一UIView的幾個動畫,所以我也想知道,如果這是一個觀點,並管理這種方法記憶的正確方式添加多個動畫的最佳方式。

非常感謝

回答

1

希望加載viewDidLoad中的資源,而不是loadView。您應該在viewDidUnload中清除它們,如果您的視圖再次加載,則在viewDidLoad中加載會將它們取回。

有人可能會爭辯說,你也可以在didReceiveMemoryWarning中將它們垃圾回收,但應該使用AFAIK viewDidUnload來釋放UI元素。如果你使用didReceiveMemoryWarning您可以檢查是否viewDidLoad中會被釋放只有viewDidUnload接到電話再次呼籲:

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    if (![self isViewLoaded]) { 
     // release resources 
    } 
} 

但是如果動畫實例var和你真的這樣做

UIImageView *animation = [[UIImageView alloc]initWithFrame:CGRectMake(50, 0, 600, 300)]; 

你不是設置intance變量而是一個本地變量。

後來

至於延遲:加載40張圖片需要它的時候,不管你做什麼。如果您不希望UI中的延遲將它們加載到後臺並在完成時通知UI。在這段時間裏,您可以展示吸引延遲的注意力。

+0

感謝您的內存信息。我以爲是因爲我沒有使用Nib的,這是放置UI代碼的最佳地方?將不得不研究這一點。在我的實際代碼中,UIImageView *動畫是一個正確的實例var,但是我沒有合成它,我應該如何?我剛剛將它放在前面的代碼中,作爲示例中的註釋狀態。我應該在示例代碼中真正寫出它。我的錯。 – EcksMedia 2011-05-06 07:21:02

+0

你不需要綜合你不會從外面訪問它。對於類本身,一個實例var就足夠了。關於什麼時候加載什麼是慣例的規則,如果你需要它們並且知道你在做什麼,就打破它們。例如,如果你不需要將動畫扔在內存警告中,因爲沒有它們,你的應用程序就無法工作,那麼就不需要考慮在哪裏加載它以及在哪裏卸載 - 它們只是在那裏。要延遲看到問題中的評論。 – 2011-05-06 13:00:37