我正在尝试构建一个CABasicAnimation来动画Core Animation CALayer的backgroundColor属性,但我无法弄清楚如何正确地包装CGColorRef值以传递给动画.例如:
CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB(); CGFloat values[4] = {1.0, 0.0, 0.0, 1.0}; CGColorRef red = CGColorCreate(rgbColorspace, values); CGColorSpaceRelease(rgbColorspace); CABasicAnimation *selectionAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; [selectionAnimation setDuration:0.5f]; [selectionAnimation setToValue:[NSValue valueWithPointer:red]]; [layer addAnimation:selectionAnimation forKey:@"selectionAnimation"];
似乎对backgroundColor属性没有任何作用,我假设因为将它作为包裹在NSValue中的指针移交它不是传递它的方法.
backgroundColor是CALayer的一个可动画属性,所以我的问题是:如何设置此特定属性的From或To值(最好是以Mac/iPhone平台无关的方式)?
你不需要换行CGColorRef
设定当s toValue
或fromValue
的性质CABasicAnimation
.只需使用CGColorRef
.要避免编译器警告,可以将其CGColorRef
转换为id
.
在我的示例应用程序中,以下代码将背景设置为红色.
CABasicAnimation* selectionAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; selectionAnimation.toValue = (id)[UIColor redColor].CGColor; [self.view.layer addAnimation:selectionAnimation forKey:@"selectionAnimation"];
但是,当动画结束时,背景将返回原始颜色.这是因为在CABasicAnimation
动画运行时唯一影响目标图层的表示层.动画结束后,模型图层中设置的值将返回.因此,您还必须将layers backgroundColor
属性设置为红色.也许使用a来关闭隐式动画CATransaction
.
你可以通过首先使用隐式动画来省去这个麻烦.