アニメーションに関するいくつかのチュートリアルを読んだ後、私はいくつかのものをテストしていました。ストーリーボードを使用してシングルビュー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を通常のアニメーションと混合するとこの動作が発生する理由がわかりません。