Ich habe ein NSWindow
, das ein NSView
enthält, mit 'Wants Core Animation Layer' aktiviert. Die Ansicht enthält dann viele NSImageView
, die anfänglich in Position animiert werden. Wenn ich die Animation starte, ist sie extrem träge und lässt die meisten Frames fallen. Wenn ich jedoch 'Wants Core Animation Layer' deaktiviere, funktioniert die Animation perfekt. Ich werde die Kernanimationsschicht benötigen, aber ich kann nicht herausfinden, wie ich sie richtig ausführen kann.
Kann ich etwas tun, um die Leistungsprobleme zu beheben?
Hier ist der Code:
%Vor% Es ist möglich, dass NSTimer
deine Leistung zerstört. Core Animation bietet umfangreiche Unterstützung für die Steuerung des Timings von Animationen über das CAMediaTiming
-Protokoll. Dies sollten Sie in Ihrer App nutzen. Versuchen Sie nicht, den Animator-Proxy und NSAnimationContext
zu verwenden, sondern Core Animation direkt zu verwenden. Wenn Sie für jedes Bild ein CABasicAnimation
erstellen und dessen beginTime
festlegen, wird der Start der Animation verzögert. Damit die Verzögerung so funktioniert, wie Sie möchten, müssen Sie jede Animation in eine CAAnimationGroup
mit ihrer duration
-Einstellung für die gesamte Zeit der gesamten Animation einbinden.
Die Verwendung der Eigenschaft frame
könnte ebenfalls zur Verlangsamung beitragen. Ich nutze die transform
-Eigenschaft in CALayer
gerne in solchen Situationen, in denen du eine "öffnende" Animation machst. Sie können Ihre Bilder in IB (oder in Code) an ihren endgültigen Positionen platzieren, und bevor das Fenster sichtbar wird, ändern Sie ihre Transformationen in die Startposition der Animation. Dann setzen Sie einfach alle Transformationen auf CATransform3DIdentity
zurück, um die Schnittstelle in ihren normalen Zustand zu versetzen.
Ich habe ein Beispiel in meinem & lt; plug type="schamlosen" & gt; bevorstehenden Core-Animationsbuch & lt; / plug & gt; , das dem, was du bist, sehr ähnlich ist versuchen zu tun. Es animiert 30 NSImageView
s gleichzeitig ohne verlorene Frames. Ich habe das Beispiel für Sie geändert und es auf github gestellt. Dies sind die wichtigsten Bits des Codes mit dem überflüssigen UI-Material:
Ich habe auch ein Video auf YouTube des Beispiels in Aktion, wenn du es ausprobieren möchtest.
Tags und Links objective-c core-animation macos cocoa core-graphics