SceneKit中的AVPlayer自动启动

时间:2017-07-18 10:15:38

标签: ios sprite-kit avplayer scenekit avkit

我在SpriteKit中使用了一个AVPlayer作为SceneKit节点的材料。但是,AVPlayer将始终自动启动!我试图将代码放在viewDidLoad或viewWillAppear中(作为一些答案),但它仍然会自动加载。

我的代码是这样的:

var apple1984Video:AVPlayer!

override func viewDidLoad() {
    super.viewDidLoad()
    ...
    apple1984Video = AVPlayer(url: Bundle.main.url(forResource: "apple1984", withExtension:"mp4")!)
    apple1984Video.actionAtItemEnd =.none
    apple1984Video.pause()

    let ad1 = addVideo(apple1984Video, name:"apple1984", position:SCNVector3(-0.1, -0.1, -0.5))
    scene.rootNode.addChildNode(ad1)
    ...
}

如何停止自动播放?

PS:这里是addVideo函数,但它主要与SceneKit / SpriteKit相关。我没有在程序的其他部分调用play()。

func addVideo(_ player:AVPlayer, name:String, position:SCNVector3) -> SCNNode {
    let spriteKitScene = SKScene(size: CGSize(width: sceneView.frame.width, height: sceneView.frame.height))
    spriteKitScene.scaleMode = .aspectFill
    spriteKitScene.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5)

    // Create the SpriteKit video node, containing the video player

    let videoNode = SKVideoNode(avPlayer: player)
    videoNode.position = CGPoint(x: spriteKitScene.size.width / 2.0, y: spriteKitScene.size.height / 2.0)
    videoNode.size = spriteKitScene.size
    videoNode.yScale = -1.0
    videoNode.alpha = 0.9
    spriteKitScene.addChild(videoNode)

    let geometry = SCNPlane(width: 0.4, height: 0.3)
    let node = SCNNode(geometry: geometry)

    geometry.firstMaterial?.isDoubleSided = true
    geometry.firstMaterial?.diffuse.contents = spriteKitScene

    node.name = name
    node.position = position
    player.pause()
    return node
}

0 个答案:

没有答案