我必须在视频顶部绘制标签或按钮relay next previous , leave comment
。视频列表有它,一旦用户从表中选择一项,就需要播放,播放器播放完成后,这些按钮或标签应该出现在视频顶部
这是我的代码:
comPlayerControl = AVPlayerViewController()
if let player = comPlayerControl {
let videoURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/"+selectedSubmission.transcodeRefId+"/format/applehttp/protocol/http/a.m3u8"
let playerItem = AVPlayerItem(URL: NSURL(string: videoURL)! )
commmentPlayer = AVPlayer(playerItem: playerItem)
player.player = commmentPlayer
player.view.frame = videoCell.frame
player.view.sizeToFit()
player.showsPlaybackControls = true
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: #selector(CommentsTableViewController.playerDidFinishPlaying(_:)),
name: AVPlayerItemDidPlayToEndTimeNotification,
object: playerItem
)
comPlayerControl.delegate = self
videoCell.addSubview(player.view)
}
func playerDidFinishPlaying(note: NSNotification) {
print("Video Finished")
let DynamicView=UIView(frame: CGRectMake(100, 200, 100, 100))
DynamicView.backgroundColor=UIColor.greenColor()
DynamicView.layer.cornerRadius=25
DynamicView.layer.borderWidth=2
DynamicView.layer.zPosition = 1;
comPlayerControl.view.addSubview(DynamicView)
}
像这样的要求
您正在使用一个AVPlayerViewController
,因此没有理由像 Alessandro Ornano 的答案那样访问应用程序的窗口。为什么要重新发明轮子?每一个AVPlayerViewController
has a contentOverlayView属性允许您在播放器和控件之间放置视图。
首先,创建一个新的AVPlayerItem
并聆听AVPlayerItemDidPlayToEndTimeNotification
关于该项目的通知。将项目加载到播放器中并开始播放。
项目完成后,您指定侦听的选择器AVPlayerItemDidPlayToEndTimeNotification
将调用通知。在该选择器中,访问contentOverlayView
直接并添加您的按钮:
在某些视图控制器或其他对象中:
let playerVC = AVPlayerViewController()
// ...
func setupPlayer {
let playerItem = AVPlayerItem(...)
playerVC.player?.replaceCurrentItemWithPlayerItem(playerItem)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(VC.itemFinished), name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)
self.presentViewController(playerVC, animated: true) {
self.playerVC.player?.play()
}
}
func itemFinished() {
let btn = UIButton(type: .System)
btn.addTarget(self, action: #selector(VC.buttonTapped), forControlEvents: .TouchUpInside)
self.playerVC.contentOverlayView?.addSubview(btn)
}
func buttonTapped() {
print("button was tapped")
// replay/comment logic here
}
正如评论中所述(以及拒绝编辑),按钮可能无法工作contentOverlayView
。有关替代解决方案,请参阅火焰兵的回答.
你也可以子类化AVPlayerViewController
并在子类的实例中执行所有操作,但是 Apple警告不要这样做:
不要子类化AVPlayerViewController
。不支持重写此类的方法,并且会导致未定义的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)