2012-09-10 3 views
1

UIImageView에서 애니메이션 변환을 수행 할 때 비정상적인 동작이 발생합니다. 이 방법의 코드는 아래에이 좌우로 흔들 것 같은 이미지가 나타날 수 있습니다 :viewDidLoad의 비정상적인 animateWithDuration 동작

-(void) shakeAnimation 
{ 
    float degrees = 30; //the value in degrees 
    imgShake.autoresizingMask = UIViewAutoresizingNone; 
    [UIView animateWithDuration:0.20f delay:0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat) animations:^{ 
     imgShake.transform = CGAffineTransformMakeRotation(degrees*M_PI/180); 
    } completion:^(BOOL finished) { 
     imgShake.transform = CGAffineTransformMakeRotation(1*M_PI/180); 
     NSLog(@"Shake finished"); 
    }]; 
} 

문제는 내가 메서드를 호출 할 경우 함께 제공됩니다. viewDidAppear에서 메서드를 호출하면 애니메이션이 완벽하게 작동하는 것처럼 보이지만 다른 이유로는 viewDidLoad으로 호출해야합니다. 내가 viewDidLoad에서 메서드를 호출 할 때 애니메이션은 작동하지만, animateWithDuration으로 지정된 속도로는 작동하지 않습니다. 훨씬 느립니다. 아마도 0.70f 일 것입니다. 내가 여기서 누락 될 수 있는게 있니?

답변

7

viewDidLoad으로 전화 할 필요가 없습니다. 그것은 단순히 잘못된 것이고 작동하지 않을 것입니다. 코드를 viewDidAppear으로 이동하십시오. viewDidLoad에 넣을 이유가있는 경우 이유를 수정하십시오!

편집 : viewDidLoad이 호출되는시기를 알지 못합니다. 한 컨트롤러에서 여러 번 호출 할 수도 있습니다. 일반적으로 느린 애니메이션 문제는 두 애니메이션 간의 충돌로 인해 발생합니다. 예를 들어, 컨트롤러가 UINavigationController으로 화면에 애니메이션으로 표시되면 애니메이션이 "푸시"애니메이션과 충돌하게되고 느려집니다. 따라서 viewDidAppear을 사용해야하는 이유는이 메서드가 호출 될 때 컨트롤러가 표시되고 "나타나는"애니메이션이 종료 되었기 때문입니다.

+0

는 설명 할 수 무슨'viewDidLoad'가의 메소드를 호출하는 문제? 또한 애니메이션 기간에 문제가있는 이유는 무엇입니까? – garethdn

+0

@garethdn 추가 정보가 추가되었습니다. – Sulthan

0

일부 지연을 사용하여 메소드를 호출하십시오.

[self performSelector:@selector(shakeAnimation) withObject: afterDelay:2.0]

관련 문제