Ich habe eine UIButton
, und ich möchte seinen Text ändern, indem Sie auf seine titleLabel
Attribut zugreifen. Wie auch immer, die Art, wie ich die Schaltfläche ändern möchte, besteht darin, zuerst auf eine sehr kleine Größe zu verkleinern, dann sofort zu ändern, während sie unsichtbar ist, und dann wieder hochzuskalieren. Nachdem ich hier mehrere Beiträge durchgesehen habe, habe ich folgendes erreicht:Wie animiere ich UILabels Text nach der Verzögerung?
let changeText = CATransition();
changeText.type = kCATransitionReveal;
changeText.duration = 0.0;
changeText.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionLinear);
submitButton.titleLabel?.layer.add(changeText, forKey: "changeTextTransition");
UIView.animateKeyframes(withDuration: 0.6, delay: 0, options: .calculationModeLinear, animations: {
//Zzzeeeewwwwwwwwww
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.5, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 0.001, y: 0.001);
})
UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.0, animations: {
self.submitButton.titleLabel?.text = "Green";
})
//Wwwwwweeeeeeyyyyyppp
UIView.addKeyframe(withRelativeStartTime: 0.5, relativeDuration: 0.5, animations: {
self.submitButton.titleLabel?.transform = self.submitButton.titleLabel!.transform.scaledBy(x: 1000, y: 1000);
})
}, completion: nil)
Das Problem ist, dass dies nicht funktioniert. Was ich bekomme, ist ein kurzes Aufblitzen der Worte "New Text", wenn das Etikett schrumpft, und wenn es wieder skaliert, ist es immer noch "Old Text". Es ist so komisch, dass ich nicht einmal anfangen kann, meinen Kopf einzuwickeln, was die Ursache sein könnte. Ich denke, was passiert, ist, dass es den neuen Übergang auf dem neuen Text spielt, bevor es sich verkleinert (Keine Ahnung, warum, seit ich Dauer = 0 angegeben habe), dann wird der alte Text wieder vergrößert. Hier
ist, wie es aussieht (mit etwas Hintergrundfarbe ändern, die ich oben weggelassen):
Versuchen Sie, 'fillMode' auf' kCAFillModeBoth' zu setzen. –
Ich weiß, dass dies nicht beantwortet Frage, aber ich habe große Erfahrung mit der Definition komplexer Animationen und Anzeigen von ihnen mit https://github.com/airbnb/lottie-ios. Lottie nimmt eine von https://github.com/bodymovin/bodymovin erstellte JSON-Datei, die auf einer After-Effects-Datei basiert. Auch wenn Sie keine After-Effect-Fähigkeiten haben, können Sie einfache Arbeit wie diese auf fivver getan werden. –
@ JonRose hat nicht funktioniert. Keine Änderung. – QuantumHoneybees