改变UIView的foregroundColor

时间:2013-10-29 10:46:18

标签: ios iphone objective-c

有没有办法改变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"];

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分: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属性来描边您正在绘制的V形符号:

CGContextSetStrokeColorWithColor(context, self.foregroundColor.CGColor);