在swift中,如何在AVPlayerViewController中播放视频时检测触摸

Bru*_*uce 6 ios avplayer swift avplayerviewcontroller

我已经以编程方式添加了AVPlayerViewController一个UIViewController.我可以在玩家完成游戏时收到通知(playerDidFinishPlaying).我还想知道用户是否在播放视频时触摸了屏幕,但我没有找到任何相关的通知.

Ahm*_*d F 6

解决方案是创建一个BaseAVPlayerViewController并覆盖touches(_:with :)方法:

斯威夫特2:

自定义基类:

class CustomAVPlayerViewController: AVPlayerViewController {
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("touchesBegan")
    }
}
Run Code Online (Sandbox Code Playgroud)

视图控制器:

let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(URL: videoURL!)
let playerViewController = CustomAVPlayerViewController()
playerViewController.player = player
self.presentViewController(playerViewController, animated: true) {
    playerViewController.player!.play()
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

自定义基类:

class CustomAVPlayerViewController: AVPlayerViewController {
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("touchesBegan")
    }
}
Run Code Online (Sandbox Code Playgroud)

查看控制器:

let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(url: videoURL!)
let playerViewController = CustomAVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
    playerViewController.player!.play()
}
Run Code Online (Sandbox Code Playgroud)

别忘了import AVKitimport AVFoundation.

每次点击时playerViewController,都会打印"touchesBegan".

  • 关于参考文档的任何想法:_不要子类化AVPlayerViewController.不支持覆盖此类的方法,并导致未定义的behavior_. (2认同)