1

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

4

1 に答える 1

0

の代わりに使用する必要があります。それらは異なる列挙型からのものであり、ブロック アニメーションを使用する場合は常に名前に含まれるものを使用します。 指定した値は でした。これにより、再配置が発生する可能性があります。UIViewAnimationOptionCurveEaseInOutUIViewAnimationCurveEaseInOutOption
UIViewAnimationOptionLayoutSubviews

これは、私があなたのコードで見つけた唯一の問題です。これが解決策でない場合は、バグが見つかりました:)

于 2013-01-28T21:10:43.883 に答える