2010-03-11 51 views

回答

4

的textColour屬性沒有被指定爲在文檔animateable,所以我不認爲你可以用一個簡單的UIView動畫塊做...

這也許可以很粗略地與NSTimer完成每隔幾毫秒發射一次,每次將顏色從一個顏色逐漸設置到另一個顏色。

我說這很粗魯,因爲它需要一個數組或其他容器的預設顏色值從開始顏色到結束顏色,我敢肯定有一種方法可以使用核心動畫或其他,我只是不知道它是什麼。

+0

或改變:即拋出與A和B以及一個給定的百分比之間的RGB值的數組的函數。儘管對顏色算法一無所知。 – dontWatchMyProfile 2010-03-11 17:42:13

+0

這裏有很好的解決方法: [here](http://stackoverflow.com/questions/6442774/is-uilabels-backgroundcolor-not-animatable/6442868#6442868) and [here](http://stackoverflow.com/a/3947389/1076848) 感謝Anna Karenina – jackal 2012-08-24 21:19:12

+4

您應該使用'CADisplayLink'而不是'NSTimer'手動驅動動畫,因爲它與顯示更新同步。請參閱[WWDC 2014會話236:構建可中斷和響應式交互](https://developer.apple.com/videos/play/wwdc2014-236/),大約在13:00。 – 2016-01-08 13:22:20

9

您可以嘗試創建UILabel的另一個實例或任何具有textColor的實例,然後在這兩個實例之間應用動畫(使用舊的textColor和使用新的textColor的動畫)。

11

textColor不具有動畫效果的原因是UILabel使用常規CALayer而不是CATextLayer。

要使textColor具有動畫效果(以及文本,字體等),我們可以繼承UILabel的子類,使其使用CATextLayer。

這是一個相當大量的工作,但幸運的是我已經做到了:-)

你可以找到一個完整的解釋+在這個article

+0

耶看起來不錯,thx很多! – Nils 2012-01-26 12:10:06

0

我發現了一個簡易的開源替代品的UILabel將UIView放置在標籤下方並將其不透明度設置爲動畫效果非常簡單。 標籤必須添加到該視圖。 從資源消耗的角度來看,也許不是一個好的解決方案,但非常簡單。

131

相反,你有沒有嘗試過使用對象本身這樣的淡入淡出過渡,它會給你從一個顏色一個漂亮的淡入淡出效果,另:

[UIView transitionWithView:myLabel duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
    myLabel.textColor = NEW_COLOR; 
} completion:^(BOOL finished) { 
}]; 

這是更好比由於各種原因使用NSTimers,CATextLayers等等。 CATextLayer對文本字距或NSAttributedText沒有適當的支持,而NSTimers是滯後的(加上代碼太多)。上面的過渡動畫可以做到這一點,也可以用於鏈式動畫。我有同樣的問題,並已經嘗試了上述解決方案,但這個簡單的代碼可以創造奇蹟。

+6

不錯,優雅,實際上是最好和最乾淨的解決方案。 – maksa 2014-05-13 10:04:53

+13

太好了。在Swift中工作方式與此相同:'UIView.transitionWithView(creditsLabel,duration:0.3,options:.TransitionCrossDissolve,animations:{self.creditsLabel.textColor = UIColor.redColor()},completion:nil)' – SimplGy 2015-08-20 13:40:14

+0

太棒了!謝謝。簡單! – Itzdsp 2016-08-27 18:27:47

4

這裏是我的代碼來動畫標籤文本顏色。所述重要的部分是動畫之前文字顏色設置爲clearColor

label.textColor = [UIColor clearColor]; 
[UIView transitionWithView:label duration:duration/4 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
    label.textColor = self.highlightedCellPrimaryTextColor; 
} completion:^(BOOL finished) { }]; 
16

夫特4溶液:

UIView.transition(with: yourLabel, duration: 0.3, options: .transitionCrossDissolve, animations: { 
    self.yourLabel.textColor = .red 
}, completion: nil) 
-1

更新迅速3。0

我剛從@budidino評論

UIView.transition(with: my.label, duration: 0.3, options: .transitionCrossDissolve, animations: { my.label.textColor = .black }, completion: nil)