アニメーションに関するいくつかのチュートリアルを読んだ後、私はいくつかのものをテストしていました。ストーリーボードを使用してシングルビューARCプロジェクトを作成しました。メインビューにUIImageViewを追加し、中心を(200、200)にしました。コンセントを正しく設定しました。
私のアイデアは、画像(UIImageView * bug)を左に移動してから、右に180度回転させ、右に戻し、左に180度回転させるなどのアニメーションを作成することでした。
これは私のコードです
viewcontroller.h
@interface ViewController : UIViewController
@property (nonatomic, assign) IBOutlet UIImageView *bug;
@end
viewcontroller.m
#import "ViewController.h"
#import <CoreGraphics/CoreGraphics.h>
@interface ViewController ()
@end
@implementation ViewController
@synthesize bug;
#pragma mark - Animations
- (void)moveToLeft
{
    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         NSLog(@"Animation 1");
                         bug.center = CGPointMake(100, 200);
                     }
                     completion:^(BOOL finished){
                        [self turnToRight];
                     }
     ];       
}
-(void)turnToRight
{
    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         NSLog(@"Animation 2");
                         bug.transform = CGAffineTransformMakeRotation(M_PI);                     }
                     completion:^(BOOL finished){
                     [self moveToRight];
                     }
     ];
}
- (void)moveToRight
{
    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         NSLog(@"Animation 3");
                         bug.center = CGPointMake(200, 200);
                     }
                     completion:^(BOOL finished){
                         [self turnToLeft];
                     }
     ];
}
-(void)turnToLeft
{
    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         NSLog(@"Animation 4");
                             bug.transform = CGAffineTransformMakeRotation(0.0);
                     }
                     completion:^(BOOL finished){
                         [self moveToLeft];
                     }
     ];
}
CGAffineTransformMakeRotationへの2回目の呼び出しまで、すべて問題ありません。画像が左に移動し、右に回転し、右に移動すると、問題が発生します。アニメーションが壊れ、バグが最初のCGAffineTransformMakeRotationの場所に移動してから左に回転し、手順が繰り返されます。
別のアプローチを試しましたが、結果としてCGAffineTransformを呼び出すたびに、UIImageViewの新しい位置が考慮されず、常に最初に呼び出された場所で変換が実行されるとは限りません。多くの例を確認しましたが、コードは正しいようです。CGAffineTransformMakeRotationを通常のアニメーションと混合するとこの動作が発生する理由がわかりません。