2017-12-12 1 views
0

Mit einem Klick wird ImageView gedreht und kehrt dann in den ursprünglichen Zustand zurück. Bei wiederholten schnellen Klicks kehrt die Bildansicht jedoch nicht in den ursprünglichen Zustand zurück. Irgendwelche Ideen warum nicht? Hier ist der Code:CGAffineTransformRotate kehrt nach wiederholten Klicks nicht in den ursprünglichen Zustand zurück

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

Ich glaube, Sie ein Flag benötigen, und wenn die Animation auf ist nicht anfangen, eine andere –

+0

Nette Idee, Reinier, aber wo bekommt man den Griff, wenn Animieren zu überprüfen? – TomV

+1

Sie können eine if-Prüfung vor dem Animate-Block nach dem setzen Sie die Animationsvariable auf True und im Ende Callback setzen Sie die Animationsvariable auf false, kann ich eine Antwort geben, wenn Sie möchten –

Antwort

0

benötigt, um CGAffineTransformMakeRotation (0) zu verwenden; als ein Rotationsende. Hier ist der Code:

[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]; 
        } 
       } 
]; 
Verwandte Themen