2013-10-29 59 views
0

有沒有辦法改變UIView的foregroundColor?更改UIView的foregroundColor

我創建了一個使用UIView(drawRect)的箭頭,就像這個「>」,背景清晰,只有兩條黑線。這很好。但之後我想將「>」的顏色從黑色更改爲紅色。使用CAKeyframeAnimation可以很好地使用動畫,例如從黑色到紅色的漸變。我可以做borderColor和backgroundColor,但這些屬性不是我正在尋找的。

我使用這個動畫塊更改另一個UIView的borderColor。我想對foregroundColor做同樣的事情,但它不適用於iOS。

CAKeyframeAnimation* colorAnim = [CAKeyframeAnimation animationWithKeyPath:@"borderColor"]; 
NSArray* colorValues = [NSArray arrayWithObjects:(id)[UIColor blackColor].CGColor,(id)[UIColor redColor].CGColor, nil]; 
colorAnim.values = colorValues; 
colorAnim.calculationMode = kCAAnimationPaced; 
colorAnim.duration = 5.0; 
colorAnim.repeatCount = 1; 
[self.myView.layer addAnimation:colorAnim forKey:@"borderColor"]; 

我感謝任何幫助,謝謝!

回答

0

UIView類沒有foregroundColor屬性,所以您必須自己實現它。在你的UIView子類接口,定義屬性:

@property (nonatomic, strong) UIColor *foregroundColor; 

在你的子類實現,覆蓋setForegroundColor: setter方法:

- (void)setForegroundColor:(UIColor *)newForegoundColor 
{ 
    _foregroundColor = newForegroundColor; 
    [self setNeedsDisplay]; // This is need so that drawRect: is called 
} 

在哪個初始化器你正在使用在子類中,設置foregroundColor屬性默認:

self.foregroundColor = [UIColor blackColor]; 

在你drawRect:實現,使用foregroundColor屬性以撫摸你正在畫的雪佛龍:

CGContextSetStrokeColorWithColor(context, self.foregroundColor.CGColor); 
+0

嗨,首先,非常感謝你的答案。我做了你所建議的一切,新的屬性工作得很好,但動畫並沒有改變子視圖的顏色。我打電話是這樣的: 'CAKeyframeAnimation * colorAnim2 = [CAKeyframeAnimation animationWithKeyPath:@ 「foregroundColor」];'' = colorAnim2.values colorValues;'' = colorAnim2.calculationMode kCAAnimationPaced;'' = colorAnim2.duration 5.0 ;' 'colorAnim2.repeatCount = 1;' '[self.balloonTriangleBorder.layer addAnimation:colorAnim forKey:@「foregroundColor」];' – Fabio

+0

要讓自定義屬性具有動畫效果,您必須在'CALayer '子類和[重寫'needsDisplayForKey:'](http://stackoverflow.com/questions/14192816/create-a-custom-animatable-property)。 – neilco

+0

好的,我會試試。不管怎樣,謝謝! – Fabio