Swift 将GIF应用于SCNPlane

Swift 将GIF应用于SCNPlane,swift,scenekit,gif,arkit,scnnode,Swift,Scenekit,Gif,Arkit,Scnnode,现在,我的Swift代码创建了一个名为we.jpg的图像的SCNPlane。我想做的是用ball.gif替换we.jpg材质.漫反射.内容是UIImage附加到SCNPlane的位置 let planeGeometry = SCNPlane(width: 0.2, height: 0.35) let material = SCNMaterial() material.diffuse.contents = UIImage(named: "we.jpg") planeGeometry.materia

现在,我的Swift代码创建了一个名为
we.jpg
的图像的
SCNPlane
。我想做的是用
ball.gif
替换
we.jpg
<代码>材质.漫反射.内容是UIImage附加到SCNPlane的位置

let planeGeometry = SCNPlane(width: 0.2, height: 0.35)
let material = SCNMaterial()
material.diffuse.contents = UIImage(named: "we.jpg")
planeGeometry.materials = [material]

您可以轻松地将SCNPlane的
.jpg
纹理替换为
.gif
纹理。但请记住,在SceneKit中不支持动画GIF纹理

这里有一个代码:

import ARKit
import SceneKit

class ViewController: UIViewController {

    @IBOutlet var sceneView: ARSCNView!   // in case you're using AR app
    //@IBOutlet var sceneView: SCNView!   // in case you're using VR app 
    let planeNode = SCNNode()

    override func viewDidLoad() {
        super.viewDidLoad()

        let scene = SCNScene()
        sceneView.scene = scene
        sceneView.allowsCameraControl = true

        planeNode.geometry = SCNPlane(width: 0.2, height: 0.35)
        planeNode.position = SCNVector3(0, 0,-0.5)
        sceneView.scene?.rootNode.addChildNode(planeNode)

        DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {  // 3 sec delay
            let image = UIImage(named: "texture.jpg")
            self.planeNode.geometry?.firstMaterial?.diffuse.contents = image
        }

        // Other stuff...
    }

    //...and you can replace a texture with a button's click:

    @IBAction func replaceTexture(_ sender: UIButton) {
        let image = UIImage(named: "texture.gif")
        planeNode.geometry?.firstMaterial?.diffuse.contents = image
    }
}

您可以轻松地将SCNPlane的
.jpg
纹理替换为
.gif
纹理。但请记住,在SceneKit中不支持动画GIF纹理

这里有一个代码:

import ARKit
import SceneKit

class ViewController: UIViewController {

    @IBOutlet var sceneView: ARSCNView!   // in case you're using AR app
    //@IBOutlet var sceneView: SCNView!   // in case you're using VR app 
    let planeNode = SCNNode()

    override func viewDidLoad() {
        super.viewDidLoad()

        let scene = SCNScene()
        sceneView.scene = scene
        sceneView.allowsCameraControl = true

        planeNode.geometry = SCNPlane(width: 0.2, height: 0.35)
        planeNode.position = SCNVector3(0, 0,-0.5)
        sceneView.scene?.rootNode.addChildNode(planeNode)

        DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {  // 3 sec delay
            let image = UIImage(named: "texture.jpg")
            self.planeNode.geometry?.firstMaterial?.diffuse.contents = image
        }

        // Other stuff...
    }

    //...and you can replace a texture with a button's click:

    @IBAction func replaceTexture(_ sender: UIButton) {
        let image = UIImage(named: "texture.gif")
        planeNode.geometry?.firstMaterial?.diffuse.contents = image
    }
}

我在let sceneView=self.view as处遇到运行时错误!SCNView。错误状态为线程1:信号SIGABRT
let sceneView=self.view as!SCNView
是一种主要用于macOS SceneKit模板的方法。此外,您还可以使用流行的UI方法–使用
@IBOutlet
创建您的
sceneView
(我已将其放在我的代码中)。为此,只需将故事板中的
ARSCNView
SCNView
ViewController
中的代码连接即可。此外,您还可以通过编程方式创建
sceneView
(所谓的API方法)–它看起来像–
var sceneView=ARSCNView()
,然后再创建
self.view.addSubview(sceneView)
。我在让sceneView=self.view时遇到运行时错误!SCNView。错误状态为线程1:信号SIGABRT
let sceneView=self.view as!SCNView
是一种主要用于macOS SceneKit模板的方法。此外,您还可以使用流行的UI方法–使用
@IBOutlet
创建您的
sceneView
(我已将其放在我的代码中)。为此,只需将故事板中的
ARSCNView
SCNView
ViewController
中的代码连接即可。此外,您还可以通过编程方式创建
sceneView
(所谓的API方法)–看起来像–
var sceneView=ARSCNView()
,然后再创建
self.view.addSubview(sceneView)