Swift,如何在 AVPlayer 上播放视频期间获得事件点击完成按钮?
Posted
技术标签:
【中文标题】Swift,如何在 AVPlayer 上播放视频期间获得事件点击完成按钮?【英文标题】:Swift, how to get event click done button during play the video on AVPlayer? 【发布时间】:2016-11-22 09:14:38 【问题描述】:我有一个 TableViewController,我通过点击单元格内的按钮在该表格上播放视频,以便由 AVPlayer 通过代码播放
@IBAction func btnFullScreen(sender: AnyObject)
let playController = AVPlayerViewController()
self.presentViewController(playController, animated: true, completion: nil)
playController.player?.play()
所以,它将全屏播放视频,并且左上角的完成按钮也存在。我想得到事件完成按钮,点击完成按钮后,它会得到玩家的当前时间做更多的事情。 但是如何让事件点击完成按钮?
【问题讨论】:
【参考方案1】:目前,您无法拦截 AVPlayerController 的 Done 按钮,为此提交了一个错误报告,radar: 27047358
您只能为AVPlayerItemDidPlayToEndTimeNotification
添加一个观察者,该观察者将在您的项目播放完毕时触发。
也根据文档:
不要继承 AVPlayerViewController。覆盖这个类的 方法不受支持并导致未定义的行为。
参考 - here
【讨论】:
感谢您的回答,您可以更新为您的答案的代码吗?因为我尝试使用 PlayerItemDIdReachEnd,但是 swift 2.2 上没有选项或名称 对不起,你可以试试 AVPlayerItemDidPlayToEndTimeNotification 此选项无法控制何时点击完成按钮。它只是控制视频何时播放完整的视频长度。 :( 这就是我在回答中告诉你的:) @AhmadF 可以通过覆盖 AVPlayerController 的类方法来实现,这不是推荐的方式,文档中也提到了。【参考方案2】:我正在使用这个技巧,它适用于我的场景,但它可能会给你一个线索:
第一步:
在你想从那里展示你的视图控制器的视图控制器上添加观察者,以便在其帧发生变化时得到通知:
self.playerViewController.addObserver(self, forKeyPath: #keyPath(MyViewController.view.frame), options: .new, context: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.playerDidFinishPlaying),
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerViewController.player!.currentItem)
第二步:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
if (keyPath == #keyPath(MyViewController.view.frame))
if playerViewController.player?.rate == 0
doneClicked()
第三步:
func doneClicked()
self.playerViewController.player!.pause()
self.playerViewController.player!.rate = 0.0
self.playerViewController.player = nil
self.playerViewController.removeObserver(self, forKeyPath: #keyPath(HomeTabViewController.view.frame))
NotificationCenter.default.removeObserver(self)
self.playerViewController.dismiss(animated: false, completion: nil)
【讨论】:
以上是关于Swift,如何在 AVPlayer 上播放视频期间获得事件点击完成按钮?的主要内容,如果未能解决你的问题,请参考以下文章
在 IOS 9 上使用 AVPlayer 和 Swift 反向播放视频
Swift 应用程序上的 AVPlayer 显示黑屏,但在播放视频时播放音频
使用swift 3点击单元格时如何在Avplayer中播放来自url的视频
如何在 Swift3 iOS 中以特定时间在 AVPlayer 中播放视频