Ich weiß, dass externe Änderungen an center
, bounds
und transform
nach UIDynamicItem
s init.
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.
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:
CALayer
oder Teilansicht und ändern Sie ihre Skalierung (aktualisieren Sie Ihre bounds
, um zu passen, wenn Kollisionsverhalten noch funktionieren muss). <UIDyanamicItem>
in NSObject
), das die Transformationsänderungen an Sie übergibt. Sie können dann die gewünschte Transformation mit Ihrer eigenen Transformation kombinieren. 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%.
Tags und Links objective-c ios uikit-dynamics uidynamicbehavior