我如何使用Core Animation在自己的类上随时间插值属性值?
时间:2020-03-05 18:48:44 来源:igfitidea点击:
具体来说,我希望在非类型的属性上使用CA
- 整数和双精度
- CGRect,CGPoint,CGSize和CGAffineTransform结构
- CATransform3D数据结构
- CGColor和CGImage参考
以及CALayers或者NSViews以外的对象
解决方案
回答
好吧,看来我做不到。我应该做的是子类化NSAnimation。这将在MacOS 10.4+应用程序上运行,但在Cocoa Touch上无法运行,在该应用程序中,除了使用NSTimer之外,我找不到任何其他选择。
回答
如果我们可以自己进行更改并且使用的类是自定义的,则可能需要向类中添加setProgress:(float)f方法并使用CA对其进行动画处理,然后根据需要根据f的功能修改所需的属性。 。
只是做一个
[[someObject animator] setValue:[NSNumber numberWithFloat:1.0] forKeyPath:@"someCustomProperty.progress"];
或者,如果对象没有动画师,请自己创建正确的CAAnimation。
回答
我不确定我们要做什么,但是如果我们想在其他属性上使用CA则不是问题。我们只需要为密钥路径注册适当的操作。在Apple的Core Animation文档中,有一个使用CAAction进行此操作的示例。具体来说,我们可以实现actionForLayer:forKey:来配置该关键帧的默认动画行为,并且如果我们想隐式地制作属性动画,则可以实现runActionForKey:object:arguments:。
至于除了CALayers以外的对象的动画,我真的不明白。图层是Core Animation中的根视觉实体。另外,在iPhone上,每个UIView都支持一个图层,我不认为iPhone屏幕上没有任何不在图层上的东西,所以我不明白为什么我们担心为什么要在非动画对象上使用动画CALayer。