我正在尝试使用初始化视图时传递的网址数组在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()
}
实际上它只播放第一个视频,但是当我向右或向左轻按视图时从不播放