我知道可以创建 custom animatable properties in Core Animation ,但是在 OS X 10.8 的 SceneKit 框架中呢? SCNAnimatable
似乎没有公开与 CALayer
相同的 API用于使属性可动画。
在我的应用程序中,我有一个 SCNNode
子类称为 Starfield
,我使用 SCNNodeRendererDelegate
从一个旧的 OpenGL 应用程序移植了它. Starfields 公开了一个 GLfloat
属性名为 warpFactor
:
@interface Starfield : SCNNode<SCNNodeRendererDelegate> {
// other stuff that's not really important for this question
GLfloat warpFactor;
}
@property(nonatomic) GLfloat warpFactor;
@end
但是当我尝试向它添加动画时,就像这样:
CABasicAnimation *warp = [CABasicAnimation animationWithKeyPath:@"warpFactor"];
warp.toValue = @1.0;
warp.duration = 5.0;
[starfield addAnimation:warp forKey:@"warp"];
我在控制台中得到以下信息:
[SCNKit ERROR] warpFactor is not an animatable path (from <unnamed SCNNode 0x1016473c0, no children>)
我知道 SceneKit 是全新的,但有没有人碰巧知道如何让它工作?
最佳答案
解决方法/黑客:
- 创建一个无几何节点并为该节点上的一些可动画属性设置动画,例如不透明度
- 使用SCNSceneRendererDelegate挂接到渲染过程的适当阶段,并使用无几何节点的动画属性的值手动更新您的自定义属性(确保从节点的
presentationNode
读取动画属性)
这个解决方案很丑陋,但它允许您通过 SCNTransaction 将自定义属性的动画与其他动画同步。或 CAAnimationGroup
关于objective-c - SceneKit 中的自定义动画属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11742902/