2012-10-10 2 views
1

애니메이션에 대한 자습서를 읽은 후 몇 가지 사항을 테스트하고있었습니다. 스토리 보드가있는 단일보기 ARC 프로젝트를 만들었습니다. 메인 뷰에 UIImageView를 (200, 200)에 센터를 추가했습니다. 콘센트를 올바르게 설정했습니다.UIView 애니메이션과 CGAffineTransformMakeRotation을 함께 사용

내 아이디어는 왼쪽으로 180도 회전하고, 오른쪽으로 180도 회전하고, 왼쪽으로 180도 회전하는 이미지 (UIImageView * 버그)를 움직이는 것이 었습니다.

이 내 코드

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에 두 번째 호출 할 때까지 OK입니다. 이미지가 왼쪽으로 이동하고 오른쪽으로 회전하고 오른쪽으로 이동 한 다음 문제가 발생합니다. 애니메이션이 중단되고 버그가 첫 번째 CGAffineTransformMakeRotation의 위치로 이동 한 다음 왼쪽으로 회전하면 단계가 반복됩니다.

다른 접근법을 시도했지만 CGAffineTransform을 호출 할 때마다 UIImageView의 새 위치를 고려하지 않고 항상 호출 된 첫 번째 위치에서 변환을 수행하는 것처럼 보입니다. 많은 예제를 살펴 보았는데 코드가 정확하다고 보았습니다. 왜 CGAffineTransformMakeRotation과 일반 애니메이션을 혼합하면 이러한 동작이 발생하는지 이해할 수 없습니다.

답변

0

당신은 OptionCurveEaseInOut 대신 UIViewAnimationCurveEaseInOutUIViewAnimation를 사용한다. 그들은 서로 다른 enum에서 왔고 블록 애니메이션을 사용할 때는 항상 Option의 이름을 사용합니다.
지정한 값이 UIViewAnimationOptionLayoutSubviews이며 재배치 될 수 있습니다.

이것은 코드에서 발견 한 유일한 문제입니다. 이것이 해결책이 아니면 버그를 발견했습니다 :)