2012-02-10 9 views
2

イメージをアニメーション化して、選択したときに左右に回転させようとしています。基本的には、タッチしているオブジェクトのユーザーに聞かせます。アニメーションを順番に実行していません

私はアニメーションのためのいくつかのコードが見つかりました:しかし

- (void)rotateImage:(UIImageView *)image duration:(NSTimeInterval)duration 
       curve:(int)curve degrees:(CGFloat)degrees delay:(CGFloat)delay 
{ 
    // Setup the animation 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDelay:delay]; 
    [UIView setAnimationDuration:duration]; 
    [UIView setAnimationCurve:curve]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    // The transform matrix 
    CGAffineTransform transform = 
    CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(degrees)); 
    image.transform = transform; 

    // Commit the changes 
    [UIView commitAnimations]; 
} 

、私は2つのアニメーションを実行しようとすると、最後のものだけが今まで作品を。適切な遅延があっても、2番目のアニメーションだけが表示されます:

[self rotateImage:self duration:.5 
       curve:UIViewAnimationCurveEaseIn degrees:60 delay:0]; 
    [self rotateImage:self duration:.5 
       curve:UIViewAnimationCurveEaseIn degrees:-60 delay:5]; 

アニメーションを作成して左に回転させ、右に回転させるにはどうしたらいいですか?

答えて

4
[UIView animateWithDuration:0.2 animations:^{ 
// animation left 
    [UIView setAnimationDelay:10]; 

    } completion:^(BOOL finished){ 

[UIView animateWithDuration:0.2 animations:^{ 
     // animation right 
    } completion:^(BOOL finished){ 
     // done 
    }]; 

    }]; 

はここでそれを見つけた

https://developer.apple.com/library/content/featuredarticles/Short_Practical_Guide_Blocks/

+0

閉じるが、アニメーション間の遅延を無視しても金融緩和を無視します。 – picciano

+0

は無視しません。遅延を追加する必要があります。サンプルが更新されました – NeverBe

0

アニメーションブロックは間違いなく行く方法です。これは、イージングを含め、あなたがしようとしていることを再現するはずです。これはビューコントローラからの呼び出しを前提としていますが、このコードをUIViewまたはUIImageViewに配置する場合は、self.viewをselfに置き換えてください。

[UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{ 
    self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(60)); 
} completion:^(BOOL finished){}]; 

[UIView animateWithDuration:0.5f delay:5.0f options:UIViewAnimationOptionCurveEaseIn animations:^{ 
    self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(-60)); 
} completion:^(BOOL finished){}]; 
+0

何らかの理由で、2番目のアニメーションが存在する場合、最初のアニメーションは発生しません。これまでと同じ問題です – user339946

+0

そのような2つのアニメーションを実行することはできません。第2のアニメーションは、同じものをアニメートするので、最初のアニメーションをキャンセルします。あなたは、最初のものの完成ブロックの内側に2番目のものを入れる必要があります。 – jsd

1
[UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{ 
    self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(60)); 
} completion:^(BOOL finished){ 
    [UIView animateWithDuration:0.5f delay:5.0f options:UIViewAnimationOptionCurveEaseIn 
     animations:^{ 
     self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(-60)); 
     } 
     completion:^(BOOL finished){}]; 
}]; 
関連する問題