Animieren einer CALayer-Maskengrößenänderung
Ich habe eine UIView
Unterklasse, die verwendet eine CAShapeLayer
Maske auf seine CALayer
. Die Maske nutzt eine klare Form, mit drei abgerundeten Ecken und eine Aussparung für das Rechteck in der verbleibenden Ecke.
Wenn ich die Größe meiner UIView
mit einem standard-animation-block, der UIView
sich und seine CALayer
Größe Prima. Die Maske jedoch ist umgehend angewendet, das führt zu einige zeichenprobleme.
Habe ich versucht, das animieren der Maske ist die Größenänderung mit einem CABasicAnimation
aber habe keine Glück bekommen Sie die Größe animiert.
Kann ich irgendwie erreichen, eine animierte Größenanpassung Effekt auf der Maske? Brauche ich, um loszuwerden, der Maske, oder muss ich etwas ändern über die Art, wie ich derzeit ziehen Sie die Maske (mit - (void)drawInContext:(CGContextRef)ctx
).
Cheers,
Alex
InformationsquelleAutor der Frage Alex Repty | 2010-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich die Lösung für dieses problem. Die anderen Antworten sind teilweise richtig und hilfreich sind.
Folgende Punkte sind wichtig zum Verständnis der Lösung:
Um zu lösen, wir sind gehen zu müssen, Tippen Sie in Core Animation selbst und können nicht Sie verlassen sich auf die UIView animation-block zu tun, die für uns arbeiten.
Erstellen Sie einfach eine
CATransaction
mit der gleichen Dauer, dass Sie mit[UIView animateWithDuration:...]
. Dies wird eine separate animation, aber wenn Ihre Dauer und die easing-Funktion ist die gleiche, es sollte animieren, genau mit den anderen Animationen in der Animations-block.InformationsquelleAutor der Antwort Kekoa
Verwende ich eine
CAShapeLayer
Maske einUIView
durch Einstellungself.layer.mask
zu, dass Form-Ebene.Animieren der Maske, wenn die Größe der änderungen anzeigen, die ich überschrieb die
-setBounds:
zum animieren der Maske Schicht Pfad, wenn die Grenzen geändert werden, während eine animation.Hier ist, wie ich es umgesetzt:
(Zum Beispiel
self.maskLayer
`selbst.Schicht.Maske)Meine
-createMaskPath
berechnet die CGPathRef, dass ich verwenden, um die Maske anzuzeigen. Ich update auch die Maske Weg in-layoutSubviews
.InformationsquelleAutor der Antwort stigi
Mask-Eigenschaft von CALayer ist nicht animierbar, die erklärt, Ihren Mangel an Glück in dieser Richtung.
Sieht die Zeichnung Ihrer Maske hängt vom Rahmen/Grenzen der Maske? (Können Sie einige code?) Hat die Maske haben needsDisplayOnBoundsChange-Eigenschaft gesetzt?
Cheers,
Corin
InformationsquelleAutor der Antwort Corin
Zu animieren, die Grenzen ändern der Maske die Schicht der UIView: UIView-Unterklasse, und animieren Sie die Maske mit einem CATransaction - ähnlich Kekodas Antwort, sondern mehr allgemein:
InformationsquelleAutor der Antwort Nick H247
Der Maske parameter nicht animieren, aber Sie können animieren Sie die Ebene, die als Maske...
Wenn Sie animieren die CAShapeLayer die Path-Eigenschaft, sollte das animieren der Maske. Ich kann bestätigen, dass diese Werke aus meinen eigenen Projekten. Nicht sicher über die Verwendung einer nicht-Vektor-Maske, obwohl. Haben Sie versucht zu animieren, die Inhalte Eigentum der Maske?
Dank,
Jon
InformationsquelleAutor der Antwort Jon Hull
Konnte ich nicht finden keine programmatischen Lösung, so dass ich ziehen Sie einfach eine png-Bilddatei mit der richtigen Form-und alpha-Werte und benutzt, statt. So habe ich nicht verwenden müssen, eine Maske...
InformationsquelleAutor der Antwort Ida
Ist es möglich, die zum animieren der Maske ändern.
Bevorzuge ich CAShapeLayer als die Ebenenmaske. Es ist sehr bequem zu animieren einer Maske ändern Sie mit Hilfe der Eigenschaft path.
Bevor Sie animieren, jede änderung, dump den Inhalt der Quelle in eine Instanz CGImageRef, und erstellen Sie eine neue Ebene für die animation. Verstecken Sie die original-Ebene, während die animation und zeigen Sie es, wenn die animation endet.
Der folgenden ist ein Beispiel-code für die Erstellung von key-animation auf der Eigenschaft der Pfad.
Wenn Sie möchten, erstellen Sie Ihre eigenen Pfad-animation, stellen Sie sicher, dass es immer die gleiche Anzahl der Punkte in den Pfaden.
InformationsquelleAutor der Antwort Slavik