2013-03-13 38 views
0

我想在應用程序啓動時添加一些動畫。在iPad模擬器上一切正常。但是當它在真實的iPad上運行時,框架仍然會持續一段時間,然後開始動畫。在所有幀顯示之前,動畫完成。 這裏是我的代碼UIImageView的動畫在真實的iOS設備上無法正常工作

- (void)viewDidAppear:(BOOL)animated 
{ 
    NSArray *myImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"], 
         [UIImage imageNamed:@"2.png"], 
         [UIImage imageNamed:@"3.png"], 
         [UIImage imageNamed:@"4.png"], 
         [UIImage imageNamed:@"5.png"], 
         [UIImage imageNamed:@"6.png"], 
         [UIImage imageNamed:@"7.png"], 
         [UIImage imageNamed:@"8.png"], 
         [UIImage imageNamed:@"9.png"], 
         [UIImage imageNamed:@"10.png"], 
         [UIImage imageNamed:@"11.png"], 
         [UIImage imageNamed:@"12.png"], 
         [UIImage imageNamed:@"13.png"], 
         [UIImage imageNamed:@"14.png"], 
         [UIImage imageNamed:@"15.png"], 
         [UIImage imageNamed:@"16.png"], 
         [UIImage imageNamed:@"17.png"], 
         [UIImage imageNamed:@"18.png"], 
         [UIImage imageNamed:@"19.png"], 
         [UIImage imageNamed:@"20.png"], 
         [UIImage imageNamed:@"21.png"], 
         [UIImage imageNamed:@"22.png"], 
         [UIImage imageNamed:@"23.png"], 
         [UIImage imageNamed:@"24.png"], 
         [UIImage imageNamed:@"25.png"], 
         [UIImage imageNamed:@"26.png"], 
         [UIImage imageNamed:@"27.png"], 
         [UIImage imageNamed:@"28.png"], 
         [UIImage imageNamed:@"29.png"], 
         [UIImage imageNamed:@"30.png"], 
         [UIImage imageNamed:@"31.png"], 
         [UIImage imageNamed:@"32.png"], 
         [UIImage imageNamed:@"33.png"], 
         [UIImage imageNamed:@"34.png"], 
         [UIImage imageNamed:@"35.png"], 
         [UIImage imageNamed:@"36.png"], 
         [UIImage imageNamed:@"37.png"], 
         [UIImage imageNamed:@"38.png"], 
         nil]; 

    //myAnimatedView is UIImageView outlet 
    myAnimatedView.animationImages = myImages; 
    myAnimatedView.animationDuration = 3; 
    myAnimatedView.animationRepeatCount = 1; 
    [myAnimatedView startAnimating]; 

    //trigger animationDone method when animation is finished 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, myAnimatedView.animationDuration * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self animationDone]; 
    }); 
+0

這些圖像有多大? (像素數) – Dancreek 2013-03-14 03:42:18

+0

@Dancreek 1024×768 – 2013-03-14 04:36:06

回答

0

嘗試預載圖像,使得通過動畫第一次當沒有延遲。

+0

謝謝,但問題沒有改變。 – 2013-03-14 02:11:54

+0

還有延遲 – 2013-03-14 02:12:39

+0

嘗試使用imageview隱藏動畫imageview,也就是說動畫圖像視圖爲0.2秒,重複次數爲1秒,然後執行具有適當持續時間和重複次數的實際動畫+ imageview未隱藏。 – 2013-03-14 05:02:01

2

我相信問題是你試圖檢測動畫是否完成。 您的方法不正確,因爲它僅基於對動畫的估計。

該手機的CPU功耗要比使用Mac的CPU的模擬器少得多,所以在執行周圍事情時速度會更慢。 所以你的動畫還沒有完成,當你認爲它已經完成加載。此外,我不明白使用Grand Central Dispatch作爲一個簡單的計時器背後的邏輯,這基本上是你在做什麼。

我會改變邏輯到一個簡單的計時器,在那裏我只是檢查UIImageViewisAnimating值。

所以,擺脫這樣的:

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, myAnimatedView.animationDuration * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self animationDone]; 
    }); 

和替換這樣的:

[self performSelector:@selector(checkAnimation) withObject:nil afterDelay:0.1]; 

這裏是我們的checkAnimation功能:

- (void)checkAnimation { 
    if (animationView.isAnimating) { 
     [self performSelector:@selector(checkAnimation) withObject:nil afterDelay:0.1]; 
    } 
    else { 
     [self animationDone]; 
    } 
} 
+0

謝謝,但即使在iPad模擬器上它也不起作用。 – 2013-03-14 01:20:00

0

加載38倍1024×768的圖像會殺你的記憶。較新的iPad可能能夠處理它,但肯定會有嚴重的滯後問題並可能崩潰。特別是在迷你和舊的墊上。

改爲考慮一個小視頻。

+0

但iPad可以播放長時間的電影,爲什麼它不能播放38個1024x768圖像?我應該使用視頻而不是圖像嗎? – 2013-03-15 07:48:00

+0

圖像和視頻是完全不同的文件。視頻不會一次全部加載到內存中。 – Dancreek 2013-03-15 13:12:10

相關問題