iOS: Eine vollständige 360-Grad-Drehung mit Block, nicht CABasicAnimation

8

Es sollte etwas wirklich einfaches sein, aber ich war nicht erfolgreich dabei, das mit Blöcken zu machen. Es gibt Fragen und Antworten zu diesem Thema, aber alle, die ich gefunden habe, werden durch die Verwendung von CABasicAnimation und nicht von UIView Block-basierte Animation gelöst, und genau darum geht es mir.

Der folgende Code funktioniert nicht (blockbasiert), keine Animation:

%Vor%

Aus meiner Sicht, wenn jedes Mal, wenn wir Block-Based verwenden, keine Animation auftreten würde, wenn UIViewAnimation Block "sieht", dass der Anfangswert derselbe wie der endgültige Wert ist. Fair genug, wenn man es auf 360 Grad stellt, bedeutet das, dass das Objekt dort bleibt, wo es ist. Aber es muss eine Möglichkeit sein, Block-basierte Animation zu verwenden, um diese animieren zu lassen, weil das folgende CABasicAnimation einwandfrei funktionieren würde:

%Vor%

Zusätzlich funktioniert das folgende blockbasierte Verfahren, aber es gibt einen Stop zwischen den Animationen (zuerst dreht es sich um 180 Grad, dann daraus um weitere 180 Grad um die Drehung abzuschließen), was ich nicht möchte:

%Vor%

Ich weiß, ich könnte viel Zeit sparen und mich einfach der Verwendung von CABasicAnimation widmen und damit fertig sein, aber ich möchte wissen warum einer arbeitet und der andere nicht dieser Fall (macht eine 360-Grad-Drehung). Ich hoffe, dass Sie mir diesbezüglich eine detaillierte Erklärung geben können zwischen den 2 in diesem Fall und einem Code (blockbasiert), der eine komplette 360-Grad-Drehung ausführen kann.

Vielen Dank im Voraus.

    
Unheilig 16.10.2013, 14:30
quelle

4 Antworten

28

Mit UIView-Animationen berechnet Core Animation den kürzesten Pfad zwischen der anfänglichen Transformation und der endgültigen Transformation. Die 360 ​​° -Rotation funktioniert nicht, da die letzte Transformation die gleiche ist wie die ursprüngliche Transformation.

Für das, was es wert ist, habe ich gerade den folgenden Code ausprobiert, der vier 90 ° -Drehungen ohne Verzögerung zwischen den Rotationen gleichmäßig macht:

%Vor%     
neilco 16.10.2013, 15:52
quelle
12

Dies ist etwas, auf das die Keyframe-Animationen von iOS 7 gut abgestimmt sind. Beispielsweise können Sie eine vollständige Drehung von view in drei Teile aufteilen:

%Vor%

Beachten Sie, dass Sie bei Verwendung von UIViewKeyframeAnimationOptionCalculationModePaced alle Startzeiten und -dauern leer lassen können.

    
jawj 16.07.2014 13:07
quelle
3

Hier ist eine vollständigere Version von neilco's rotateSpinningView.

Es spinnt im oder gegen den Uhrzeigersinn. Es hat einen completion: -Parameter und es startet und stoppt einfach.

%Vor%     
henrikberg 30.11.2013 19:13
quelle
1

@neilco eine sehr gute Lösung, aber es ist eine unendliche Rotation.

Basierend auf seinem Code modifiziere ich ein Bit, um eine Rotation mit einer Schleife zu implementieren.

%Vor%

}

    
Ranger Way 22.07.2015 21:59
quelle