iOS: Simultane Skalierung und 3D-Rotationsanimation

7

Ich habe ein Video gemacht, das die Animation zeigt, die ich erreichen möchte: Hier ist es.

Beachten Sie, dass das Video die Aktion von der Seite zeigt. Das Kamerasymbol repräsentiert den Benutzer-POV. Es ist im Grunde eine Simulation einer Translation unter der Z-Achse, die durch eine Skalentransformation erreicht wird, wobei gleichzeitig eine unabhängige zweistufige 3D-Rotation entlang der X-Achse stattfindet.

Sieht und klingt einfach genug, oder? Falsch. Hier ist der ideale Code, der nicht funktioniert:

%Vor%

Wenn Sie dies tun, wird die 3D-Drehung komplett ignoriert. Ich habe eine Reihe anderer Ansätze ausprobiert, und alle haben versagt.

Einige Voraussetzungen:

  • Die Skala sollte vorzugsweise ein CGAffineTransform sein
  • Easing sollte wie abgebildet sein, besonders bei der Rotation

Natürlich, wenn eine Lösung auftaucht, die einige Änderungen erfordert, könnte ich mich anpassen.

Vielen Dank im Voraus für jede Hilfe. Wenn Sie eine Klarstellung benötigen, fragen Sie bitte.

    
radutzan 24.12.2012, 04:10
quelle

2 Antworten

25

Sie können die gleiche Eigenschaft nicht animieren, ohne dass die erste Animation abgebrochen wird. Sie sollten die Kernanimation verwenden und entweder zwei Animationen oder eine Keyframe-Animation ausführen.

Zwei Transformationsanimationen

Indem Sie eine Animation für die Skalierung erstellen (die Sie als z-Translation verwenden können, wenn Sie möchten) und eine für die Drehung, die ihnen sehr spezifische Schlüsselpfade gibt, werden sie sich nicht gegenseitig aufheben.

%Vor%

Eine einzelne Keyframe-Animation

Da Sie drei sehr gute Keyframes haben, wäre der zu animierende Code zwischen den drei Keyframes leicht zu lesen und zu verstehen. Sie würden möglicherweise einen Teil des Steuerelements verlieren, wenn Sie das Timing der Skalierung getrennt von dem der rotierenden ändern möchten.

%Vor%

Perspektive

In beiden Fällen habe ich die Perspektive gemacht, indem ich den sublayerTransform auf den Superlayer der animierenden Ansicht gesetzt habe (vorausgesetzt, es gibt dort nur eine Unteransicht mit einer Transformation)

%Vor%     
David Rönnqvist 24.12.2012, 10:49
quelle
2

Ich habe einen Weg gefunden, aber es ist mehr wie ein Hack. Mach folgendes -

1) Erstellen Sie eine Ansicht mit transparentem Hintergrund - (diese Ansicht wird übersetzt) 2) Erstellen Sie eine Unteransicht von 1) - (diese Ansicht wird rotieren).

Verwenden Sie nun zwei Transformationen, eine Skalierungstransformation für Ansicht 1) und eine Rttaion-Transformation für Ansicht 2) und wenden Sie sie gleichzeitig an.

    
Bharat Gulati 21.12.2013 07:49
quelle