UIDynamicItem update manuell transformieren

7

Ich weiß, dass externe Änderungen an center , bounds und transform nach UIDynamicItem s init.

ignoriert werden

Aber ich muss die transform von UIView in UIDynamicAnimator system manuell ändern.

Jedes Mal, wenn ich transform ändere, wird es sofort abgedeckt.

Also irgendeine Idee? Vielen Dank.

    
xiaobo 17.12.2013, 10:16
quelle

2 Antworten

15

Jedes Mal, wenn Sie eine der animierten Eigenschaften ändern, müssen Sie [dynamicAnimator updateItemUsingCurrentState:item] aufrufen, damit der dynamische Animator weiß, dass Sie es getan haben. Es aktualisiert seine interne Repräsentation, um dem aktuellen Status zu entsprechen.

EDIT: Ich sehe aus Ihrem Code unten, dass Sie versuchen, die Skala zu ändern. UIDynamicAnimator unterstützt nur Rotation und Position, nicht Skalierung (oder jede andere Art von affiner Transformation). Es übernimmt leider transform , um nur Rotation zu implementieren. Ich halte das für einen Fehler in UIDynamicAnimator (aber dann finde ich viel von der Implementierung von UIKit Dynamics als "Bugs" zu klassifizieren).

Was Sie tun können, ist Ihre Grenzen zu ändern (bevor Sie updateItem... aufrufen) und sich neu zu zeichnen. Wenn Sie die Leistung einer affinen Transformation benötigen, haben Sie einige Optionen:

  • Verschieben Sie Ihre tatsächliche Zeichnungslogik in eine CALayer oder Teilansicht und ändern Sie ihre Skalierung (aktualisieren Sie Ihre bounds , um zu passen, wenn Kollisionsverhalten noch funktionieren muss).
  • Anstatt Ihre Sicht an das Verhalten anzuhängen, hängen Sie ein Proxy-Objekt an (implementieren Sie einfach <UIDyanamicItem> in NSObject ), das die Transformationsänderungen an Sie übergibt. Sie können dann die gewünschte Transformation mit Ihrer eigenen Transformation kombinieren.
Rob Napier 17.12.2013, 13:15
quelle
10

Sie können auch die .action-Eigenschaft von UIDynamicBehavior verwenden, um die gewünschte Transformation bei jedem Häkchen der Animation festzulegen.

%Vor%

Sie müssten innerhalb des Aktionsblocks Logik hinzufügen, um zu bestimmen, wann und in welcher Menge die Skalierung geändert werden soll. Andernfalls liegt Ihre Ansicht immer bei 120%.

    
Erwin 20.12.2013 20:08
quelle