2014-06-09 3 views
5

프로그래밍 방식으로 호출되는 UIImageView가 있습니다. 회전 할 수 있지만 동작하지 않습니다. 이미지는 동적 인 UITableView 안에 배치 될 것입니다 (정적으로 변경할 수는 없습니다). 이미지가 내 테이블 뷰에 잘 나타나지만 회전하지 않습니다.CABasicAnimation이 UIImageView와 함께 작동하지 않습니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 122, 38, 38)]; 
    imageView.image = [UIImage imageNamed:@"settings1.png"]; 

    [self.view addSubview:imageView]; 

    CABasicAnimation *spin; 
    spin = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
    spin.fromValue = [NSNumber numberWithFloat:0]; 
    spin.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)]; 
    spin.duration = 4; 
    spin.repeatCount = 10*1000; 

    [imageView.layer addAnimation:spin forKey:@"360"]; 

답변

7

아마도 viewDidLoad에서 애니메이션을 시작하려고하기 때문일 수 있습니다. viewDidLoad에서 이미지 뷰 인스턴스를 만들고 viewDidAppear :이 실제로 애니메이션을 시작하기 위해 호출 될 때까지 기다리는 것과 같은 방법으로 코드를 재구성하는 것이 좋습니다.

@property (strong, nonatomic) UIImageView *imageView; 

그리고

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 122, 38, 38)]; 
    self.imageView.image = [UIImage imageNamed:@"settings1.png"]; 

    [self.view addSubview:self.imageView]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    CABasicAnimation *spin = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
    spin.fromValue = [NSNumber numberWithFloat:0]; 
    spin.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)]; 
    spin.duration = 4; 
    spin.repeatCount = 10*1000; 

    [self.imageView.layer addAnimation:spin forKey:@"360"]; 
} 
+0

감사합니다! 이러한 쉬운 솔루션은 참조 용으로 왜이 방법이 효과가 있었습니까? viewDidLoad 때까지 기다렸다가 때문입니까? – Ed3121577

+4

@ user3121577 기본적으로보기가 실제로 화면에 나타날 때까지 애니메이션을 시작하지 마십시오. viewDidLoad가 호출 된 시점에서 뷰 컨트롤러의 뷰가로드되었지만 실제로는 뷰 계층에 추가되지 않았기 때문에 뷰의 뷰포트 나 하위 뷰와 같은 애니메이션이나 사물이 때때로 튕겨 나올 수 있습니다. 인생주기에서 너무 일찍 일어난다. –

+0

그게 말이 되네, 다시 한번 감사드립니다! – Ed3121577

관련 문제