Wenn zwei Hauptanimationen mit CAAnimationGroup gruppiert werden, wird eine CABasicAnimation nicht ausgeführt

8

Ich habe zwei Animationen, die ich auf einem UILabel auf dem iPhone mit OS 3.1.2 ausführen möchte. Der erste rockt den UILabel hin und her:

%Vor%

Der zweite zoomt das UILabel so, dass es größer wird:

%Vor%

Das Hinzufügen einer dieser Animationen direkt zur UILabel-Ebene funktioniert wie erwartet.

Wenn ich jedoch versuche, die Animationen zu gruppieren, funktioniert die erste "rockende" Animation nicht:

%Vor%

Die Reihenfolge des Hinzufügens der Animationen zu der Gruppe spielt keine Rolle. Anstatt zu zoomen, habe ich versucht, die Grenzen zu ändern, aber das war auch nicht erfolgreich. Jede Einsicht würde sehr geschätzt werden. Danke.

    
Christian 22.01.2010, 19:55
quelle

2 Antworten

8

Sie versuchen gleichzeitig zwei Änderungen an einer Eigenschaft, der Transformation Ihres CALayers, zu animieren. In der ersten Animation verwenden Sie einen Hilfeschlüsselpfad, um die Transformation zu ändern, um eine Rotation zu erzeugen, und in der zweiten ändern Sie die Transformation direkt, um eine Skalierung zu erzeugen. Die zweite Animation überschreibt die erste, weil Sie ganze Transformationen konstruieren, die nur zwischen ihnen skaliert und animiert werden.

Es scheint, dass Sie sowohl die Skalierung als auch die Drehung Ihrer Ebene durch Verwendung von Hilfeschlüsselpfaden für beide Animationen bewirken können. Wenn Sie Ihren Code in der Skalierungsanimation ändern, lesen Sie

%Vor%

Sie sollten in der Lage sein, Ihre Ebene zu rocken und zu skalieren.

    
Brad Larson 25.01.2010, 15:56
quelle
2

Ich glaube, dass CAAnimationGroup nicht das ist, was Sie wollen. Aus der Dokumentation für CAAnimationGroup:

  

CAAnimationGroup erlaubt mehrere   Animationen gruppiert und ausgeführt werden   gleichzeitig. Die gruppierten Animationen   run in dem von der   CAAnimationGroup-Instanz.

Es klingt so, als wollten Sie nicht, dass Ihre Animationen gleichzeitig, sondern sequenziell laufen. Es gibt vielleicht einfachere Möglichkeiten, dies zu tun, aber ich habe festgestellt, dass die animationDidStop:finished: -Methode gut funktioniert. Erstellen Sie dazu Ihre erste Animation und legen Sie ihren Delegaten auf ein Objekt fest, das die Methode animationDidStop:finished: implementiert, und fügen Sie die Animation wie gewohnt hinzu (ohne CAAnimationGroup zu verwenden). In der Methode:

%Vor%     
CJ. 22.01.2010 20:44
quelle

Tags und Links