我有一個UIButton
,我想通過訪問其titleLabel
屬性來更改其文本。然而,我希望按鈕改變文字的方式是首先縮小到非常小的尺寸,然後在不可見時立即改變,然後縮小。看過這裏的多個帖子後,我已經達到了這個:如何延遲後動畫UILabel的文本?
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)
問題是,這是行不通的。當標籤縮小時,我得到的是「New Text」字樣的快速閃爍,然後當它縮小時,它仍然是「舊文本」。這很奇怪,我甚至無法開始圍繞什麼可能是原因。我認爲發生的事情是,它在新文本縮小之前(不知道爲什麼,因爲我指定了duration = 0),然後增長回舊文本。
這裏是什麼樣子(有一些背景顏色的變化,我上面略):
嘗試將'fillMode'設置爲'kCAFillModeBoth'。 –
我知道這並不能回答你的問題,但我在定義複雜的動畫和使用https://github.com/airbnb/lottie-ios顯示它們方面有着豐富的經驗。 Lottie需要一個由https://github.com/bodymovin/bodymovin創建的基於後續效果文件的json文件。即使你沒有任何效果技能,你也可以在fivver上完成這樣簡單的工作。 –
@JonRose沒有工作。不用找了。 – QuantumHoneybees