как добавить жест касания для воспроизведения видеоплеера - PullRequest
0 голосов
/ 15 мая 2018
videoPlayer = (AVPlayer.init(url: url as URL) as AVPlayer?)!

videoPlayer.actionAtItemEnd = .none

var videoLayer = AVPlayerLayer(player: videoPlayer)

videoLayer.frame = CGRect(x: 0, y: 0, width: (pickVideo?.frame.width)!, height: (pickVideo?.frame.height)!)

pickVideo?.layer.addSublayer(videoLayer)

videoLayer.addSublayer((closeImage?.layer)!)

let tapGueturePlayVideo = UITapGestureRecognizer(target: self, action: #selector(playVideo(sender:)))
tapGueturePlayVideo.delegate = self
tapGueturePlayVideo.numberOfTapsRequired = 1
pickVideo?.addGestureRecognizer(tapGueturePlayVideo)
pickVideo?.isUserInteractionEnabled = true

И я создал здесь функцию Tapgesture:

func playVideo(sender: UITapGestureRecognizer) {

    self.videoPlayer.play()

}

Если долго нажимать и касаться видео, оно воспроизводится плавно. Если я касаюсь экрана сбоку и пытаюсь воспроизвести его в другой разне играет .. Точки останова при нажатии, но игрок не играет

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Лучший способ сделать это - использовать AVPlayerViewController и contentOverlayView

Вот так:

 override func viewDidLoad() {
    super.viewDidLoad()

    let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")!
    videoPlayer = AVPlayer(url: videoURL)
    let avPlayerController = AVPlayerViewController()
    avPlayerController.player = videoPlayer
    avPlayerController.view.frame = CGRect(x: 100, y: 50, width:200, height: 300)
    avPlayerController.showsPlaybackControls = false
    self.view.addSubview(avPlayerController.view)

    let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.playVideo(sender:)))
    tapGesture.numberOfTapsRequired = 1
    avPlayerController.contentOverlayView?.addGestureRecognizer(tapGesture)
}


 @objc func playVideo(sender: UITapGestureRecognizer) {

        self.videoPlayer?.play()

    }
0 голосов
/ 15 мая 2018

Вы должны установить AVPlayer обратно в начало потока, используя prepareToPlay и установив currentPlaybackTime в 0.

AVPlayer не проигрывается более одного раза

videoPlayer.currentPlaybackTime = 0
videoPlayer.prepareToPlay()
...