ios - 想要使用 Scenekit 更改节点的 y 值

标签 ios xcode animation scenekit

我想在一段时间内仅缩小节点的 y 值。我无法使用方法scaleBy:duration:或scaleTo:duration,因为它们改变了所有轴值,而我只想改变y值。我决定尝试使用 customActionWithDuration:actionBlock: 方法制作自定义动画。这是我为该方法编写的代码

SCNAction *scale = [SCNAction customActionWithDuration:1.0 actionBlock:^(SCNNode *node,
                                                                                        CGFloat elapsedTime){

            node.scale = SCNVector3Make(100, 0, 0);

        }];



        [planeNode runAction:scale]; //run custom animation on node

当我尝试上面的代码时,没有任何变化。节点保持相同的大小。我做错了什么?

最佳答案

customActionWithDuration:actionBlock:正如其文档中所述,“在指定的持续时间内定期执行一个 block ”。因此,您的 block 会一遍又一遍地将比例设置为相同的值。

相反,您希望利用 block 被重复调用(并提供 elapsedTime 值)这一事实来动画随时间的变化。像这样的东西:

CGFloat endScale = 100;
CGFloat duration = 1.0;
CGFloat startScale = planeNode.scale.y;
SCNAction *action = [SCNAction customActionWithDuration:1.0 actionBlock:
    ^(SCNNode *node, CGFloat elapsedTime){
        currentScale = startScale + endScale * (elapsedTime/duration);
        node.scale = SCNVector3Make(currentScale, 0, 0);
    }];

或者,除非出于某种原因您需要使用 Action 而不是动画,否则您可以使用隐式动画:

[SCNTransaction begin];
node.scale = SCNVector3Make(node.scale.x, 100, node.scale.y);
[SCNTransaction setAnimationDuration:1.0];
[SCNTransaction commit];

关于ios - 想要使用 Scenekit 更改节点的 y 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36291619/

相关文章:

ios - 无法在模拟器或设备中运行 iOS 项目

objective-c - Xcode 构建失败 "Undefined symbols for architecture x86_64"

java - 如果不建议使用挥杆组件后退技巧?

css - 链式 CSS3 动画

iphone - 我想在加载新图像时删除 tableviewcell 中的图像。在 iOS 中

ios - 解析本地 xml 文件并在 TableView 中呈现数据

ios - 没有这样的模块 'Parse'/'Bolts'

javascript - 使用 UIWebView 从 HTML 代码调用 objective-c 代码中的方法

ios - Xcode 6 与 iOS 9?

javascript - 页面翻转转换为 JQuery 中的自定义 url?