Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift spritkit场景中的淡入淡出视频_Ios_Swift_Sprite Kit - Fatal编程技术网

Ios swift spritkit场景中的淡入淡出视频

Ios swift spritkit场景中的淡入淡出视频,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在将一个展厅应用程序从as3/starling移植到一个本地的swift iPad应用程序 我有两个问题: 如何在spritekit内容上淡入视频(从alpha 0到1) 如何在不显示iOS屏幕音量通知图形的情况下,通过单个UI元素控制iPad音量 我的第一个答案回答了您最初的问题,这个答案是针对评论中发布的后续问题定制的。我觉得这两个答案对社区都是有用的,而不是仅仅合并成一个我认为会令人困惑的答案 在这里,我实现了一个音量滑块和一个拖动滑块,用于控制VideoNode的AVPlayer对象

我正在将一个展厅应用程序从as3/starling移植到一个本地的swift iPad应用程序

我有两个问题:

  • 如何在spritekit内容上淡入视频(从alpha 0到1)

  • 如何在不显示iOS屏幕音量通知图形的情况下,通过单个UI元素控制iPad音量


  • 我的第一个答案回答了您最初的问题,这个答案是针对评论中发布的后续问题定制的。我觉得这两个答案对社区都是有用的,而不是仅仅合并成一个我认为会令人困惑的答案

    在这里,我实现了一个音量滑块和一个拖动滑块,用于控制VideoNode的AVPlayer对象。。您可以使用AVPlayer的全部功能,但也可以使用SKVideoNode的便利性。此外,无需调整系统音量和随后的灰色音箱弹出窗口,即可控制播放视频的音量:

    import SpriteKit
    import MediaPlayer
    
    
    class GameScene: SKScene {
    
      let seekSlider = UISlider(frame: CGRect(x: 0, y: 0, width: 200, height: 15))
      let volSlider  = UISlider(frame: CGRect(x: 0, y: 0, width: 200, height: 15))
    
      // Because it takes time for us to load the video, we don't know it's duration,
      // hence we don't know what the `.maximumValue` should be for the seekSlider
      let defaultMax = Float(0.123456789)
    
      var player: AVPlayer!
      var videoNode: SKVideoNode!
    
      func seekSliderChangedValue(sender: UISlider) {
        // Wait for file to finish loading so we can get accurate end duration:
          if sender.maximumValue == defaultMax {
          if CMTimeGetSeconds(player.currentItem!.duration).isNaN { return }
          else { sender.maximumValue = Float(CMTimeGetSeconds(player.currentItem!.duration)) }
        }
    
        let value = CMTimeMake(Int64(seekSlider.value), 1)
        player.seek(to: value)
        player.play()
      }
    
      func volSliderChangedValue(sender: UISlider) {
        player.volume = sender.value
      }
    
      override func didMove(to view: SKView) {
        removeAllChildren()  // Delete this in your actual project.
    
        // Add some labels:
        let seekLabel = SKLabelNode(text: "Seek")
        seekLabel.setScale(3)
        seekLabel.verticalAlignmentMode = .center
        seekLabel.position = CGPoint(x: frame.minX + seekLabel.frame.width/2,
                                     y: frame.maxY - seekLabel.frame.height)
        let volLabel  = SKLabelNode(text: "Volume")
        volLabel.setScale(3)
        volLabel.verticalAlignmentMode = .center
        volLabel.position = CGPoint(x: frame.minX + volLabel.frame.width/2,
                                    y: frame.minY + volLabel.frame.height + volSlider.frame.height)
    
        // Make player and node:
        let url = Bundle.main.url(forResource: "sample", withExtension: "mp4")!
        player = AVPlayer(url: url)
        videoNode = SKVideoNode(avPlayer: player!)
    
        //Configure seek slider:
        seekSlider.addTarget(self, action: #selector(seekSliderChangedValue), for: UIControlEvents.valueChanged)
        seekSlider.maximumValue = defaultMax
        let seekOrigin = convertPoint(toView: CGPoint(x: seekLabel.frame.minX, y: seekLabel.frame.minY))
        seekSlider.frame = CGRect(origin: seekOrigin, size: CGSize(width: 200, height: 15))
    
        //Configure vol slider:
        volSlider.addTarget(self, action: #selector(volSliderChangedValue), for: UIControlEvents.valueChanged)
        volSlider.value = 1
        let volOrigin = convertPoint(toView: CGPoint(x: volLabel.frame.minX, y: volLabel.frame.minY))
        volSlider.frame = CGRect(origin: volOrigin, size: CGSize(width: 200, height: 15))
    
        //Scene stuff:
        view.addSubview(seekSlider)
        view.addSubview(volSlider)
        addChild(seekLabel)
        addChild(volLabel)
        addChild(videoNode)
    
        // Start video and animation:
        videoNode.alpha = 0
        videoNode.play()
        videoNode.run(.fadeIn(withDuration: 5))
      }
    }
    

    我正在为您开发一个新的答案,它使用avPlayer和SKVideoNode,但允许您调整音量并进行搜索。视频播放但没有用于搜索流的接口!?!嗯,我用seek和volume alider找到了它。我可以在不同的设备@bluelemonadeok上再看一看,我可以在模拟器和iphone上的纵向模式下的设备(ios 10)上看到它查看更新的github:好的,在iphone模拟器上,我可以看到UI,在iPad上的横向模式下,什么都没有。顺便说一句:当我使用高清视频时,图像会被裁剪。@bluelemonade我无法为你编写整个应用程序:)这已经是我对一个问题给出的第三个答案了。请接受回答,并提出一个关于景观模式和种植的新问题