3

この質問がよく聞かれることは知っていますが、他のすべての回答を試しましたが、アニメーション停止セレクターが呼び出されない理由がわかりません。コードは次のとおりです。

-(void) moveImage:(UIImageView *)image duration:(NSTimeInterval)duration curve:(int)curve  x:(CGFloat)x y:(CGFloat)y annKey:(NSString *) annKey{  

[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve:curve];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];
CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
image.transform = transform;
[UIView beginAnimations:annKey context:NULL];
[UIView commitAnimations];

}

これは、すべての正しいパラメータが送信されるメインのアニメーション関数です。

- (void)animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context
{
if ([animationID isEqualToString:@"Burn"])
{
    NSLog(@"Animation: %@ has finished.",animationID);
}

NSLog(@"This does not get called, why not?");
}

NSLogのどれもテキストを表示しません。私は何が間違っているのですか?

4

2 に答える 2

8

あなたはする必要があります -

[UIView beginAnimations:annKey context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];

// Now define rest.
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve:curve];
[UIView setAnimationBeginsFromCurrentState:YES];
CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
image.transform = transform;

[UIView commitAnimations];
于 2012-07-03T16:51:42.243 に答える
3

何が問題なのかわかりませんが、beginAnimations/commitAnimations を使用するべきではありません。代わりに、ブロック アニメーションを使用します。完了コードは、呼び出しの完了部分で直接定義します。

[UIView animateWithDuration:2.0
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^{
                     // animation code
                 } 
                 completion:^(BOOL finished){
                     // completion code
                 }];
于 2012-07-03T16:53:45.313 に答える