2011-10-14 19 views
10

アニメーションが終了したときを検出する方法はありますか?アニメーションが終了したら[nav setTitle:navItem]に電話します。iOS:アニメーションが終了したときを検出するにはどうすればよいですか?

以下は、私のコードのスニペットです。質問が十分に明確であることを願って、私は解決策、好ましくは例を得ることができます。

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{ 

if(event.subtype == UIEventSubtypeMotionShake){ 


    NSString *imageUrl = @""; 
    NSString *navItem = @""; 

    int randomNumber = arc4random() % 3; 

    switch (randomNumber) { 
     case 0: 
      imageUrl = @"pic1.png"; 
      navItem = @"txt1"; 
      break; 
     case 1: 
      imageUrl = @"pic2.png"; 
      navItem = @"txt2"; 
      break; 
     case 2: 
      imageUrl = @"pic3.png"; 
      navItem = @"txt3"; 
      break; 
     default: 
      break; 
    } 

    animation.animationImages = [NSArray arrayWithObjects: 

           [UIImage imageNamed:@"pic1.png"], 
           [UIImage imageNamed:@"pic3.png"], 
           [UIImage imageNamed:@"pic2.png"], 
           [UIImage imageNamed:@"pic1.png"], 
           [UIImage imageNamed:@"pic2.png"], 
           [UIImage imageNamed:@"pic3.png"], 
           [UIImage imageNamed:imageUrl], 
           nil]; 

    UIImage *img = [UIImage imageNamed:imageUrl]; 
    [imageview setImage:img]; 

    [animation setAnimationRepeatCount:1]; 
    animation.animationDuration = 1; 
    [animation startAnimating]; 

    [nav setTitle:navItem]; 

} 

} 
+2

あなたの答えがあなたの問題を解決するなら、それを受け入れることは良いことであり、評判のポイントは2つです。 – zaph

答えて

4

[animation isAnimating] ==いいえ、アニメーションが終了しました。

あなたはそれが終了するまで待つが、UIをブロックしないようにしたい場合:

while ([animation isAnimating]) { 
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]]; 
} 
+0

ありがとう、ちょうど私が必要なもの。問題が解決しました! :) – thar

+1

@thar:これで問題が解決した場合は、回答を「受け入れる」:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

これはそう思わないそれ以上の作業:http://stackoverflow.com/questions/3144300/isanimating-return-is-faulty-for-uiimageview-for-iphone – Nuthinking

10

あなたはsetAnimationDidStopSelectorデリゲートを使用することができます。ただアニメーションは、あなたがそれを告げた時間の量に完了することを前提としてい
http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html

[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; 


- (void)animationDidStop:(NSString*)animationID finished:(BOOL)finished context:(void *)context { 
    /*Do stuff*/ 
} 
+2

アニメーションの種類のアニメーションで動作するかどうかわかりません。 [UIView beginAnimations:context:]を使用するアニメーションでのみ動作します。 – morningstar

+3

animationImagesタイプのアニメーションでは機能しません。 – Dustin

-2
[self performSelector:@selector(animationFinished) withObject:nil afterDelay:1.0]; 

-(void)animationFinished { 
    // do stuff 
} 

関連する問題