11

我知道可以在 Core Animation 中创建自定义动画属性,但是在 OS X 10.8 的 SceneKit 框架中呢? SCNAnimatable似乎没有公开CALayer用于使属性可动画化的相同 API。

在我的应用程序中,我有一个SCNNode名为 的子类Starfield,我使用SCNNodeRendererDelegate. 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 是全新的,但有没有人碰巧知道如何使它工作?

4

2 回答 2

3

解决方法/黑客:

  • 创建一个无几何节点并为该节点上的一些可动画属性设置动画,例如不透明度
  • 使用SCNSceneRendererDelegate挂钩到渲染过程的适当阶段,并使用无几何节点的动画属性的值手动更新您的自定义属性(确保从节点的 中读取动画属性presentationNode

这个解决方案很丑,但它允许您通过SCNTransactionCAAnimationGroup将自定义属性的动画与其他动画同步

于 2014-08-04T09:34:51.180 回答
-1

SceneKit 不支持自定义动画键路径

于 2012-07-31T15:45:00.453 回答