我如何使用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。