热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

动画的替代品(forKey:)(现已弃用)?

如何解决《动画的替代品(forKey:)(现已弃用)?》经验,为你挑选了1个好方法。

我正在使用iOS 11(for ARKit),虽然许多人指出SceneKit来自Apple 的示例应用程序与Fox,我在该示例项目(文件)中使用的扩展程序有问题,以添加动画:

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现在是默认内置的吗?

该文档并未真正显示有关其被弃用的原因或从何处开始的详细信息.

谢谢



1> Lësha Turkow..:

TL; DR:Apple的示例游戏中可以找到如何使用新API的示例(搜索SCNAnimationPlayer)


即使animation(forKey:)它的姐妹方法CAAnimation已被弃用iOS11,你可以继续使用它们 - 一切都会奏效.

但是如果你想使用新的API并且不关心向后兼容性(ARKit无论如何你都不需要它,因为它只在以后可用iOS11),请继续阅读.

SCNAnimationPlayer与其前身相比,新推出的API提供了更方便的API.现在可以更轻松地实时处理动画. 这部影片从WWDC2017将是一个很好的起点,以了解它.

快速摘要:SCNAnimationPlayer允许您动态更改动画的速度.它使用诸如提供了更直观的接口,用于动画的播放play()stop()相比添加和删除CAAnimation秒.您还可以将两个动画混合在一起,例如,可以使用它们在它们之间进行平滑过渡.

您可以在Apple的Fox 2游戏中找到如何使用所有这些的示例.


这是您发布的适合使用的扩展SCNAnimationPlayer(您可以Character在Fox 2示例项目的课程中找到):

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()
    


推荐阅读
author-avatar
XC一米_623
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有