【发布时间】:2015-01-01 07:58:03
【问题描述】:
我有一个UIView,它使用-drawRect: 绘制自己,我想为用于绘图的颜色设置动画。基本的UIView 动画内容由于明显的原因(drawRect)不起作用。
我不能简单地使用CAShapeLayer 来绘制视图内容并为其设置动画。我想尝试手动伪造动画,使用计时器或CADisplayLink 与setNeedsDisplay 结合使用。有没有一种相当简单的方法可以将这种魔力隐藏在通常的 UIView 动画 API 后面?
例如,假设有一个 color 属性我想制作动画:
[UIView animateWithDuration:0.2 animations:^{
[customDrawingView setColor:[UIColor redColor]];
}];
有没有办法“拦截”动画调用以读取动画参数(时间、目标值)并手动处理它们?我不想调酒UIView。
【问题讨论】:
-
谢谢。不过,那是在使用
CALayers 吗?我有现有的绘图代码,看起来很难重构为CALayer,我只需几个步骤就可以轻松地使用简单的动画。这就是为什么我想尝试使用现有的drawRect实现。 -
虽然我思考的时间越长,我就越相信
CALayer是正确的选择。 -
您也可以在图层中进行自定义核心图形绘制。
-
我已经尝试过
CALayer方法。CALayer没有动画颜色,所以我尝试了CAShapeLayer。但是CAShapeLayer只支持单一路径,我需要一个具有不同笔触、填充和选项的复杂路径。我可以用普通的CALayer来绘制它,但是我必须手动添加动画支持。最后,使用CADisplayLink和setNeedsDisplay对现有绘图代码进行动画处理要容易得多。我必须添加显式动画 API 调用(setProperty:duration:),但我可以接受。
标签: ios cocoa-touch uiview core-animation