0

アプリの起動時にアニメーションを追加したい.すべてがiPadシミュレーターでうまく機能します.しかし、実際のiPadで実行すると、フレームはしばらく静止し、その後アニメーションを開始します. すべてのフレームが表示される前に、アニメーションは終了します。これが私のコードです

    - (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];
    });
4

3 に答える 3

2

アニメーションが終了したかどうかを検出しようとしている方法に問題があると思います。アニメーションに関する見積もりに基づいているだけなので、あなたのアプローチは正しくありません。

携帯電話は、Mac の CPU を使用しているエミュレーターよりもはるかに少ない CPU パワーを持っているため、周りの処理が遅くなります。したがって、読み込みが完了したと仮定すると、アニメーションはまだ終了していません。

さらに、Grand Central Dispatch を単純なタイマーとして使用する背後にあるロジックがわかりません。これは基本的にあなたがしていることです。

ロジックを単純なタイマーに変更しisAnimatingUIImageView.

だから、これを取り除きます:

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];
    }
}
于 2013-03-13T09:27:17.037 に答える
0

38 個の 1024x768 画像をロードすると、メモリが失われます。新しい iPad はそれを処理できるかもしれませんが、深刻な遅延の問題やクラッシュする可能性があることは間違いありません。特にミニと古いパッドでは。

代わりに小さなビデオを検討してください。

于 2013-03-14T13:16:02.027 に答える
0

最初にアニメーション化するときに遅延がないように、画像をプリロードするようにしてください。

于 2013-03-13T09:03:35.740 に答える