小编Jac*_*eld的帖子

暂停SceneKit动画

我正在尝试创建一个测试应用程序,用户可以通过单击SceneView来暂停动画.SceneView从在3d应用程序(Cinema 4D)中创建的.dae文件加载动画.该应用程序在启动时成功播放并循环播放动画.

为了暂停动画,我使用了技术问答QA1673作为参考.在这个.dae文件的情况下,动画实际上是作为动画的层次结构进行的,所以我尝试深入到每个底层CAKeyframeAnimation并将其速度设置为零.我的代码目前看起来像这样:

- (void)mouseDown:(NSEvent *)event {

     SCNNode *cubeNode = [self.scene.rootNode childNodeWithName:@"C4D_Cube" recursively:YES];
     CAAnimation *cubeAnimation = [cubeNode animationForKey:@"Cube_Anim_01-02-1"];      
     CAAnimationGroup *cubeAnimationGroup = (CAAnimationGroup *)cubeAnimation;

     // cubeAnimationGroup contains 3 CAAnimationGroups, each of which contains a CAKeyframeAnimation.
     // So I directly access each CAKeyframeAnimation and set its speed to zero.
     for (CAAnimationGroup *subGroup in [cubeAnimationGroup animations]) {
          CFTimeInterval pausedTime = CACurrentMediaTime();
          [[subGroup animations] setValue:@0.0 forKey:@"speed"];
          [[subGroup animations] setValue:[NSNumber numberWithFloat:pausedTime] forKey:@"timeOffset"];
     }
}
Run Code Online (Sandbox Code Playgroud)

当我设置断点时,我可以看到关键帧动画的速度确实从1变为0,但动画在场景视图中继续以正常速度播放.我最初尝试将顶级CAAnimationGroup的速度设置为零,但这也没有效果.暂停正在进行动画的正确方法是什么?

macos core-animation scenekit

3
推荐指数
1
解决办法
3287
查看次数

标签 统计

core-animation ×1

macos ×1

scenekit ×1