我如何使用Core Animation在我自己的类上插入属性值?

funde 发布于 2018-04-27 cocoa 最后更新 2018-04-27 08:25 632 浏览

具体来说,我正在寻找使用CA以外的其他类型的属性

  • 整数和双精度
  • CGRect,CGPoint,CGSize和CGAffineTransform结构
  • CATransform3D数据结构
  • CGColor和CGImage引用
  • 和CALayers或NSViews以外的对象中
已邀请:

funde

赞同来自:

好吧,看来我不能那样做。我应该做的是[NSAnimation的子类化](http://developer.apple.com/documentation/Cocoa/Conceptual/AnimationGuide/Articles/TimingAnimations.html#//apple_ref/doc/uid/TP40003581-CJBGGDAD子类化NSAnimation)。这将适用于MacOS 10.4+应用程序,但不适用于Cocoa Touch,除了使用NSTimer之外,我找不到任何替代方案。

weos

赞同来自:

如果你可以自己做改变,你使用的类是自定义的,你可能想要为你的类添加一个setProgress:(float)f方法,并使用CA来为它创建动画,然后根据需要修改所需的属性作为函数f 。 只是做一个

[[someObject animator] setValue:[NSNumber numberWithFloat:1.0] forKeyPath:@"someCustomProperty.progress"];
或者如果对象没有动画师,请自己创建正确的CAAnimation。

get

赞同来自:

我不确定你想要做什么,但是如果你想在其他属性上使用CA而不是问题。您只需要为关键路径注册适当的操作。有一个使用CAAction在Apple的Core Animation文档中执行此操作的示例。具体来说,您需要实现actionForLayer:forKey:来配置该键的默认动画行为,并且如果要隐式创建属性动画,则需要实现runActionForKey:object:arguments:。 至于动画CALayers以外的物体,我真的不明白。图层是Core Animation中的根视觉实体。另外,在iPhone上,每一个UIView都支持在一个图层上,我不相信iPhone的屏幕上没有任何图层不在图层中,所以我不明白为什么你在使用动画CALayer。