2012-04-14 3 views
2

Ich habe einfache Rotation Transformation, kombiniert mit alpha, die perfekt funktioniert beim ersten Aufruf, aber die Drehung passiert nicht das zweite Mal (der Benutzer initiiert diese Animation durch Antippen des Bildschirms).iOS5 CGAffineTransformMakeRotation funktioniert nicht das zweite Mal, wenn ich es mache?

Hier ist meine Grundanimationsfunktion:

- (void) animateMe:(UIImageView *)myImage delay:(NSTimeInterval)dly 
{ 
    [UIView animateWithDuration:1.0 
          delay:dly 
         options:UIViewAnimationOptionAutoreverse 
        animations:^(void){ 
         myImage.alpha = 1.0; 
         myImage.transform = CGAffineTransformMakeRotation(180.0); 
        } 
        completion:^(BOOL finished) { 
         myImage.alpha = 0.0; 
        }]; 
} 

Antwort

7

Das Problem ist, dass das zweite Mal, wenn Sie die Ansicht drehen wollen, ist es bereits um 180 Grad und die Linie gedreht wird:

myImage.transform = CGAffineTransformMakeRotation(180.0); 

ist äquivalent zu:

012.351:

myImage.transform = myImage.transform; 

So sollten Sie so etwas wie zu tun

myImage.transform = CGAffineTransformRotate(myImage.transform, 180.0); 

Beachten Sie, dass die documentation sagt, dass der Drehwinkel in Radiant Grad ein nicht sein sollte. Sie sollten also wahrscheinlich M_PI anstelle von 180.0 verwenden.

Beachten Sie auch, dass die documentation sagt, dass UIViewAnimationOptionAutoreversemuss mit UIViewAnimationOptionRepeat kombiniert werden.

UIViewAnimationOptionAutoreverse

Führen Sie die Animation rückwärts und vorwärts. Muss mit der Option UIViewAnimationOptionRepeat kombiniert werden.

+0

Danke, das ist sehr hilfreich! Ich gebe deinem Vorschlag einen Versuch und weise den Scheck zu, wenn er funktioniert, klingt, als hättest du recht damit. Sehr überrascht, dass sie Radianten verwenden würden - scheint eine peinliche Art, es zu tun, aber ich sehe, dass das, was die Dokumentation sagt. –

+0

Ok, ich brauchte einen Moment, um festzustellen, dass CGAffineTransformRotate() eine andere Funktion als CGAffineTransformMakeRotation() ist! Dein Vorschlag funktioniert, danke. Ihre Links waren sehr hilfreich, ich lerne viel über die Affine Transformationen. –

+0

Ein weiterer Kommentar, ich habe Dokumentation über Blockanimation gelesen und es heißt, dass Sie eine Wiederholungszahl in Kombination mit UIViewAnimationOptionAutoReverse angeben können - es ist nicht erforderlich, mit UIViewAnimationAutoRepeat zu kombinieren. –

Verwandte Themen