extension CAAnimation { class func animationWithScenenamed(_ name: String) -> CAAnimation? { var animation: CAAnimation? if let scene = SCNScene(named: name) { scene.rootNode.enumerateChildNodes({ (child,stop) in if child.animationKeys.count > 0 { animation = child.animation(forKey: child.animationKeys.first!) stop.initialize(to: true) } }) } return animation }}
看来这个扩展非常方便,但我不确定如何迁移它现在它已被弃用?它现在默认内置在SceneKit中吗?
该文档并未真正显示有关其被弃用的原因或从何处开始的详细信息.
谢谢
解决方法 TL; DR:Apple的 sample game(搜索SCNAnimationPlayer)中可以找到如何使用新API的示例尽管在iOS11中已经弃用了动画(forKey :)及其使用CAAnimation的姐妹方法,但您可以继续使用它们 – 一切都会起作用.
但是如果你想使用新的API并且不关心向后兼容性(无论如何你都不需要ARKit,因为它仅在iOS11之后可用),请继续阅读.
与之前的产品相比,新推出的SCNAnimationPlayer提供了更方便的API.现在可以更轻松地实时处理动画.
来自WWDC2017的This video将是了解它的一个很好的起点.
作为快速摘要:SCNAnimationPlayer允许您动态更改动画的速度.与添加和删除CAAnimations相比,它使用play()和stop()等方法为动画播放提供了更直观的界面.
您还可以将两个动画混合在一起,例如,可以使用它们在它们之间进行平滑过渡.
您可以在Fox 2 game by Apple中找到如何使用所有这些的示例.
这是您发布的适用于使用SCNAnimationPlayer的扩展(您可以在Fox 2示例项目的Character类中找到它):
extension SCNAnimationPlayer { class func loadAnimation(fromScenenamed scenename: String) -> SCNAnimationPlayer { let scene = SCNScene( named: scenename )! // find top level animation var animationPlayer: SCNAnimationPlayer! = nil scene.rootNode.enumerateChildNodes { (child,stop) in if !child.animationKeys.isEmpty { animationPlayer = child.animationPlayer(forKey: child.animationKeys[0]) stop.pointee = true } } return animationPlayer }}
您可以按如下方式使用它:
>加载动画并将其添加到相应的节点
let jumpAnimation = SCNAnimationPlayer.loadAnimation(fromScenenamed: "jump.scn")jumpAnimation.stop() // stop it for Now so that we can use it later when it's appropriate model.addAnimationPlayer(jumpAnimation,forKey: "jump")
>使用它!
model.animationPlayer(forKey: "jump")?.play()总结
以上是内存溢出为你收集整理的ios – 动画的替代品(forKey :)(现已弃用)?全部内容,希望文章能够帮你解决ios – 动画的替代品(forKey :)(现已弃用)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)