从URL数组在UIView中播放视频-快速-以编程方式

时间:2020-09-07 13:43:36

标签: swift uiview avfoundation avplayer avplayerlayer

我正在尝试使用初始化视图时传递的网址数组在UIView中播放视频:

let cardView = CardView(frame: .zero, cardModel: CardModel(name: "Bella Gu", urlStrings: ["url1", "url2"]))

我以这种方式设置playerView内部视图:

 fileprivate func setUpPlayer(cardModel : CardModel){
    
    let videoURL = URL(string: (cardModel.urlStrings?.first)!)
    
    player = AVPlayer(url: videoURL!)
    playerLayer = AVPlayerLayer(player: player)
    
    playerLayer.videoGravity = .resizeAspectFill
    
    self.playerView.layer.insertSublayer(playerLayer, at: 0)
    
    self.playerView.layer.masksToBounds = true
    player.play()
    
}

 override func layoutSubviews() {
    self.layer.cornerRadius = 15
    playerLayer.frame = self.bounds
   
}

然后我想要当我点击右侧的视图时转到下一个视频,如果我点击左侧的视图则转到上一个视频;这就是我实现的。

@objc fileprivate func handleTapCard(sender: UITapGestureRecognizer){
    
    let tapXLocation = sender.location(in: self).x
    
    if tapXLocation >= self.frame.width/2{
        //go right
        goToNextVideo()
        
    }else{
        //go left
        goToPreviousVideo()
    }
}


fileprivate func goToNextVideo(){
    
    counter = counter + 1
    counter = min(counter, cardModel.urlStrings!.count - 1)
    print(counter)
    playVideoWithURL(urlString: cardModel.urlStrings![counter])
    updateProgressBar()
    
}


fileprivate func goToPreviousVideo(){
    
    counter = counter - 1
    counter = max(0, counter )
    print(counter)
    playVideoWithURL(urlString: cardModel.urlStrings![counter])
    updateProgressBar()
}



fileprivate func playVideoWithURL(urlString: String){
    
    guard let videoURL = URL(string: urlString) else {
        return
    }
    player = AVPlayer(url: videoURL)
    playerLayer = AVPlayerLayer(player: player)
    
    playerLayer.videoGravity = .resizeAspectFill
    
    self.playerView.layer.masksToBounds = true
    player.play()
}

实际上它只播放第一个视频,但是当我向右或向左轻按视图时从不播放

0 个答案:

没有答案