2017-12-12 1 views
0

한 번의 클릭으로 ImageView가 회전 한 다음 다시 원래 상태로 돌아갑니다. 그러나 반복되는 빠른 클릭에서 이미지보기는 원래 상태로 돌아 가지 않습니다. 어떤 아이디어가 좋을까요? 코드는 다음과 같습니다.반복 클릭 후 CGAffineTransformRotate가 원래 상태로 돌아 가지 않음

int repeatCounter = 20; 

NSLog(@"Rotate animate started"); 
[imageView.layer removeAllAnimations]; 

// Set image 
if ([imageView isEqual:rideImageView]){ 
    [rideImageView setImage:rideImage]; 
} 
else{ 
    [crashImageView setImage:crashImage]; 
} 

CGAffineTransform rotateStart = CGAffineTransformRotate(imageView.transform, 0.2); 
CGAffineTransform rotateEnd = CGAffineTransformRotate(imageView.transform, 0.0f); 


// this spin completes 360 degrees every 2 seconds 
[UIView animateWithDuration:duration/repeatCounter 
         delay:0 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 
        [UIView setAnimationRepeatAutoreverses:YES]; 
        [UIView setAnimationRepeatCount:repeatCounter]; 
        imageView.transform = rotateStart; 
       } 
       completion:^(BOOL finished) { 
          NSLog(@"Rotate animate completed"); 

        imageView.transform = rotateEnd; 

        if (finished) { 

         NSLog(@"Rotate animate finished but after repeated clicks is permanently rotated"); 

         if ([imageView isEqual:rideImageView]){ 
          [rideImageView setImage:rideLabelledImage]; 
         } 
         else{ 
          [crashImageView setImage:crashLabelledImage]; 
         } 
        } 
        } 
       ]; 
+0

난 당신이 플래그를 필요가 있다고 생각, 그리고 애니메이션에있을 때 다른 –

+0

멋진 아이디어, 라이 니어을 시작하지 않지만, 어디 핸들이 애니메이션 있는지 확인하기 위해 어떻게해야합니까? – TomV

+1

animate 블록 앞에 if 체크를 추가 할 수 있습니다. 애니메이션 변수를 true로 설정하고 finish 콜백에서 animating 변수를 false로 설정하면 –

답변

0

CGAffineTransformMakeRotation (0); 회전 끝으로 여기에 코드입니다 :

[imageView.layer removeAllAnimations]; 

// Set image 
[crashImageView setImage:crashImage]; 

CGAffineTransform rotateStart = CGAffineTransformRotate(imageView.transform, 0.2); 
CGAffineTransform rotateEnd = CGAffineTransformMakeRotation(0); 

int repeatCounter = 20; 

// Rattles to and fro 
[UIView animateWithDuration:duration/repeatCounter 
         delay:0 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 
        [UIView setAnimationRepeatAutoreverses:YES]; 
        [UIView setAnimationRepeatCount:repeatCounter]; 
        imageView.transform = rotateStart; 
       } 
       completion:^(BOOL finished) { 
        //NSLog(@"Rotate animate completed"); 

        // Ensure back to original state whether or not animation has completely finished 
        imageView.transform = rotateEnd; 

        if (finished) { 

         //NSLog(@"Rotate animate finished but after repeated clicks is permanently rotated"); 
         [crashImageView setImage:crashLabelledImage]; 
        } 
       } 
]; 
관련 문제