当前位置:  开发笔记 > IOS > 正文

你如何明确动画CALayer的backgroundColor动画?

如何解决《你如何明确动画CALayer的backgroundColor动画?》经验,为你挑选了1个好方法。

我正在尝试构建一个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平台无关的方式)?



1> Jason Medeir..:

你不需要换行CGColorRef设定当s toValuefromValue的性质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.

你可以通过首先使用隐式动画来省去这个麻烦.


甜.你认为他们会在某个地方记录类型转换.是的,我可以通过隐式动画让我的生活变得更轻松,但这让我烦恼.为了使其持久化,您只需将动画的fillMode设置为kCAFillModeForwards,将removedOnCompletion设置为NO.
推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有