Aus irgendeinem Grund funktioniert es nicht, wenn ich versuche, textColor zu animieren. Die Textfarbe ändert sich plötzlich von A nach B. Ist es möglich, sie zu animieren, beispielsweise von Rot zu Schwarz?
quelle
Aus irgendeinem Grund funktioniert es nicht, wenn ich versuche, textColor zu animieren. Die Textfarbe ändert sich plötzlich von A nach B. Ist es möglich, sie zu animieren, beispielsweise von Rot zu Schwarz?
Diese Antwort ist veraltet und keine gute Lösung für die ursprüngliche Frage. Die Antwort von @strange unten ist viel besser und sollte anstelle dieser Antwort verwendet werden: https://stackoverflow.com/a/20892927/76559
// Alte Antwort unten
Das textColor
Eigenschaft ist in den Dokumenten nicht als animierbar angegeben, daher glaube ich nicht, dass Sie dies mit einem einfachen UIView-Animationsblock tun können ...
Dies könnte wahrscheinlich ziemlich grob mit einem NSTimer
Brennen alle paar Millisekunden geschehen , wobei jedes Mal die Farbe allmählich von einer zur anderen eingestellt wird.
Ich sage, das ist grob, weil es ein Array oder einen anderen Container mit voreingestellten Farbwerten erfordern würde, die von der Startfarbe bis zur Endfarbe reichen, und ich bin sicher, dass es eine Möglichkeit gibt, dies mithilfe der Kernanimation oder so etwas zu tun Ich weiß nicht was es ist.
CADisplayLink
sondern verwenden,NSTimer
da sie mit Anzeigeaktualisierungen synchronisiert sind. Siehe WWDC 2014, Sitzung 236: Aufbau unterbrechbarer und reaktionsfähiger Interaktionen um ca. 13:00 Uhr.Wenn Sie stattdessen versucht haben, einen Überblendungsübergang für das Objekt selbst wie folgt zu verwenden, erhalten Sie einen schönen Einblendeffekt von einer Farbe zur anderen:
Ziel c
Schnell
Dies ist aus verschiedenen Gründen besser als die Verwendung von NSTimern, CATextLayers usw. CATextLayer unterstützt Textkerning oder NSAttributedText nicht ordnungsgemäß, und NSTimer sind verzögert (und es gibt zu viel Code). Die obige Übergangsanimation erledigt den Trick und kann auch in einer Kettenanimation verwendet werden. Ich hatte das gleiche Problem und habe bereits die oben genannten Lösungen ausprobiert, aber dieser einfache Code wirkt stattdessen Wunder.
quelle
UIView.transitionWithView(creditsLabel, duration: 0.3, options: .TransitionCrossDissolve, animations: { self.creditsLabel.textColor = UIColor.redColor() }, completion: nil)
Swift 4- Lösung:
quelle
UILabel
für diewith
Eigenschaft haben. Wenn Sie so etwas tuntransition(with: outerView.label…)
und versuchen, es in sich aufzunehmen, schlägt dies lautlos fehl.options: .easeInOut
, dass ich es getan habe , also habe ich es geändert.transitionCrossDissolve
und gearbeitet.Der Grund dafür, dass textColor nicht animierbar ist, ist, dass UILabel anstelle eines CATextLayer einen regulären CALayer verwendet.
Um textColor animierbar zu machen (sowie Text, Schriftart usw.), können wir UILabel in Unterklassen unterteilen, damit es einen CATextLayer verwendet.
Das ist ziemlich viel Arbeit, aber zum Glück habe ich es schon getan :-)
Eine vollständige Erklärung + einen Open-Source-Ersatz für UILabel finden Sie in diesem Artikel
quelle
Sie können versuchen, eine andere Instanz des UILabels oder was auch immer mit der Textfarbe zu erstellen, und dann die Animation zwischen diesen beiden Instanzen anwenden (die mit der alten Textfarbe und die mit der neuen Textfarbe).
quelle
Dies war das EINZIGE, was für mich funktioniert hat:
quelle
Hier ist mein Code zum Animieren der Etikettentextfarbe. Der wichtige Teil besteht darin, textColor vor der Animation auf clearColor zu setzen
quelle
Ich fand es ziemlich einfach, ein UIView unter dem Etikett zu platzieren und seine Deckkraft zu animieren. Das Etikett muss dieser Ansicht hinzugefügt werden. Vielleicht keine gute Lösung aus Sicht des Ressourcenverbrauchs, aber ziemlich einfach.
quelle
aktualisiert schnell 3.0
Ich habe mich gerade von den Kommentaren von @budidino geändert
quelle
Vielen Dank für die Antwort von @ Strange , die in Swift 5, Xcode 11 mit einer geringfügigen Änderung der Syntax perfekt funktioniert. Ich habe die Textfarbe für mehrere UILabels animiert. Wenn dies auch Ihr Fall ist, versuchen Sie dies
quelle