objective-c - SceneKit 中的自定义动画属性

标签 objective-c macos core-animation osx-mountain-lion scenekit

我知道可以创建 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/

相关文章:

ios - CATransform3D 之后的 UITextView : scrolling all out of whack

ios - 工具栏和 TableView 让我头疼

ios - CGRectApplyAffineTransform 和实际 View 的框架

objective-c - AppDelegate 中的方向检测

py2app 制作的应用程序中存在 Python 代码

Xcode:如何使用具有跨项目引用的单独项目在您的应用程序中嵌入框架?

macos - 为什么特定存储库的 git status 返回相对于根目录而不是当前目录的路径?

ios - 创建自定义 Segue 的正确方法

objective-c - 创建文件模板?

ios - iOS7 上错误的 UITableView 分隔符颜色