私はFORループから動画を再生する必要があるアプリで作業しています。つまり、ループの各繰り返しで提供される文字列に対してローカルビデオを再生する必要があります。Swift:forループから順番に動画を再生する
問題は、ループからplayVideo()funcを呼び出すときに、すべてのビデオが同時に再生されることです。私はそれらを順番に再生し、AVPlayerLayerを却下する、つまりスーパーレイヤーから削除するようにします。 1つのビデオを再生すると、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
}
すべてのヘルプは
あなたの問題をここで指摘しているように、あなたのコードをリンクや[最小限の完全かつ検証可能な例を作成する](http://stackoverflow.com/help/mcve)として与えてはいけません。 –
はリンクをコードに置き換えました。問題は理解できますか? –
実際には、私はアイオスについて知らない、それはちょうどあなたの最初の投稿のレビューとダウン票からあなたを保存:) –