2017-12-12 16 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

ナイスアイデア、Reinierを開始しませんが、どこで、ハンドルがアニメーションかどうかを確認するのですか? – TomV

+1

アニメーションブロックの前にifチェックを追加して、アニメーション変数をtrueに設定し、終了コールバックでアニメーション変数を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]; 
        } 
       } 
]; 
関連する問題