Ich habe zwei Ansichten: A und B. A ist oben auf dem Bildschirm positioniert, B ist am unteren Bildschirmrand positioniert.
Wenn der Benutzer eine Schaltfläche drückt, animiert B aufwärts mit einer EaseInEaseOut-Bezier-Kurve, bis er y = 0 erreicht. Während B auf dem Weg zu seinem Ziel ist, sollte es A nach oben drücken, wenn es auf A trifft. Wenn B beim Übergang von unten nach oben eine bestimmte y-Koordinate (A's Ursprung + Höhe) passiert hat, sollte A bei B bleiben, so scheint es, dass B A nach oben drückt.
Was ich bisher versucht habe:
Irgendwelche Vorschläge, was ich als nächstes versuchen kann?
Sie haben gesagt, dass Sie versucht haben, die Technik "B animieren und Anzeigeverbindung verwenden, um A zu aktualisieren" anzuwenden, und dass dies dazu führte, dass "A" hinter "B" zurückblieb. Sie könnten theoretisch eine neue Ansicht "C" animieren und dann die Frames von B und A in der Anzeigeverbindung entsprechend anpassen, wodurch Verzögerungen (relativ zueinander) eliminiert werden sollten.
Zwei einfache Lösungen:
Nur animationWithDuration
verwenden: Sie können Ihre Animation in zwei verschachtelte Animationen aufteilen, indem Sie das Verschieben von "B" auf "A" beschleunigen und dann das Verschieben von "animieren" mit "easy out" animieren "B" und "A" den Rest des Weges. Der einzige Trick besteht darin, sicherzustellen, dass die beiden duration
-Werte sinnvoll sind, damit sich die Geschwindigkeit der Animation nicht zu ändern scheint.
Sie können animateWithDuration
mit der vollständigen Animation von "B" umgehen, aber dann CADisplayLink
verwenden und presentationLayer
verwenden, um B's aktuellen frame
abzurufen und A's Rahmen entsprechend anzupassen:
Hier sind die Methoden zum Starten, Stoppen und Behandeln der Anzeigeverbindung wie folgt definiert:
%Vor%Tags und Links objective-c iphone ios core-animation