我正在开发一个应用程序,我需要从 FOR 循环播放视频,即根据循环每次迭代中提供的字符串播放本地视频。
问题是当我从循环中调用 playVideo() 函数时,所有视频同时播放。我希望他们一个接一个地播放,然后关闭 AVPlayerLayer,即从 super 层中删除。 当播放单个视频时,playerLayer 会被忽略,但如果播放多个视频,playerLayer 会保持不变。
如何让他们依次播放?
我读过有关使用调度队列的内容,但对它们了解不多。
代码:
func parseString(string: String){
var stringArray = string.componentsSeparatedByString(" ")
logTextView.text = ""
for i in 0..<stringArray.count{
playVideo(stringArray[i].lowercaseString)
}
}
var player: AVPlayer!
var playerLayer: AVPlayerLayer!
// video player
private func playVideo(name: String) {
guard let path = NSBundle.mainBundle().pathForResource(name, ofType:"mp4") else {
print("file not found")
return
}
player = AVPlayer(URL: NSURL(fileURLWithPath: path))
playerLayer = AVPlayerLayer(player: player)
// playerController.player = player
self.playerLayer.frame = self.view.bounds
self.view!.layer.addSublayer(self.playerLayer)
self.player!.play()
// playing = true
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.playerDidFinishPlaying(_:)),
name: AVPlayerItemDidPlayToEndTimeNotification, object: player.currentItem)
}
func playerDidFinishPlaying(note: NSNotification) {
print("Video Finished")
self.playerLayer.removeFromSuperlayer()
// playing = false
}
如有任何帮助,我们将不胜感激
最佳答案
那就不要使用for循环。获取 int i = 0
,然后增加 (i++
),直到 i
大于 stringArray.count
if (i == stringArray.count) {
//end
}
从 playerDidFinishPlaying(note: NSNotification)
调用执行上述执行的函数。
希望这会有所帮助。
关于ios - Swift:从for循环轮流播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40672226/