2016-11-18 52 views
0

我正在開發一個應用程序,我需要從FOR循環播放視頻,即按照循環的每次迭代中提供的字符串播放本地視頻。Swift:從for循環開始輪流播放視頻

問題是當我從循環中調用playVideo()func時,所有視頻都同時播放。我希望他們一個接一個地玩,然後解散AVPlayerLayer,即從超級玩家身上移除。 播放單個視頻時,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 
} 

任何幫助,將不勝感激

+0

不要將您的代碼作爲鏈接並[創建最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve),其中指出了您的問題。 –

+0

用代碼替換了鏈接。問題可以理解嗎? –

+0

其實,我不知道ios,它只是審查你的第一篇文章,並從下來的投票中拯救你:) –

回答

0

不要爲循環使用即可。以一個int i = 0,則增加(i++),直到i變得超過stringArray.count

if (i == stringArray.count) { 
    //end 
} 

通話功能,你在哪裏做上述執行,從playerDidFinishPlaying(note: NSNotification)。 希望這會有所幫助。

+0

有一個層被刪除和其他被添加滯後。如何使過渡無縫? –