如何获取SCNNode指定Key的动画?涉已弃用API无官方替代方案
获取SCNNode指定Key的CAKeyframeAnimation替代方案
当animation(forKey:)方法被弃用后,你可以通过SCNNode的animations属性来获取指定key的动画,这是当前官方隐含的替代方式,适配你用CAKeyframeAnimation添加自定义动画的场景。
实现步骤
- 访问节点的
animations属性,它返回可选的[String: Any]字典,存储了所有通过addAnimation(_:forKey:)添加的动画 - 根据目标key从字典中取出对象,强转为
CAKeyframeAnimation类型后即可进行修改操作
示例代码
// 替换为你的目标动画Key let targetKey = "scaleAnimation" if let animDict = yourSCNNode.animations, let keyframeAnim = animDict[targetKey] as? CAKeyframeAnimation { // 修改动画属性,比如调整时长、关键帧序列 keyframeAnim.duration = 2.5 keyframeAnim.values = [NSValue(scnVector3: SCNVector3(1,1,1)), NSValue(scnVector3: SCNVector3(2,2,2))] // 若动画处于运行状态,需先移除再重新添加以让修改生效 yourSCNNode.removeAnimation(forKey: targetKey) yourSCNNode.addAnimation(keyframeAnim, forKey: targetKey) }
注意事项
animations属性包含所有已添加的动画,无论这些动画是SceneKit内置类型还是你自定义的CAKeyframeAnimation- 直接修改运行中的动画属性可能无法实时生效,建议先移除原有动画,修改完成后再重新添加到节点上
内容的提问来源于stack exchange,提问作者codetiger
相关产品推荐
相关产品推荐

