Dựa trên câu hỏi của bạn và từ những nhận xét/code của Ramis tôi đã thực hiện một đoạn code mẫu mà bạn có thể thử
Như đã đề cập bởi JAL các contentOverlayView nên là lựa chọn tốt nhất để hiển thị kiểm soát video trong AVPlayerController, nhưng theo bản demo mẫu của tôi, contentOverlayview không có bất kỳ tương tác người dùng nào cho các nút hoặc các điều khiển khác, như thể bạn kiểm tra chế độ xem 3D của AVPlayerController nó có AVTouchIgnoringView/UIView trước contentOverlayView có thể là sự cố trong tương tác người dùng của contentOverlayView
Vì vậy, một giải pháp khác là thêm chế độ xem lớp phủ trong AVPlayerViewController
func addContentOverlayView() {
OverlayView.frame = CGRectMake(0,30,AVPlayerVC.view.bounds.width, 100)
OverlayView.hidden = true
OverlayView.backgroundColor = UIColor (red: 0.5, green: 0.5, blue: 0.5, alpha: 0.379)
let btnNext = UIButton(frame:CGRectMake(AVPlayerVC.view.bounds.width - 60,0,60,44))
btnNext.setTitle(">>", forState:.Normal)
btnNext.addTarget(self, action:"playNext", forControlEvents:.TouchUpInside)
// btnNext.layer.borderColor = UIColor (red: 0.0, green: 0.0, blue: 1.0, alpha: 0.670476140202703).CGColor
// btnNext.layer.borderWidth = 1.0
OverlayView.addSubview(btnNext)
let btnReplay = UIButton(frame:CGRectMake((AVPlayerVC.view.bounds.width/2)-40,0,80,44))
btnReplay.setTitle("Replay", forState:.Normal)
btnReplay.addTarget(self, action:"replayVideo", forControlEvents:.TouchUpInside)
OverlayView.addSubview(btnReplay)
let btnPrevious = UIButton(frame:CGRectMake(0,0,80,44))
btnPrevious.setTitle("<<", forState:.Normal)
btnPrevious.addTarget(self, action:"previousVideo", forControlEvents:.TouchUpInside)
OverlayView.addSubview(btnPrevious)
let btnComment = UIButton(frame:CGRectMake((AVPlayerVC.view.bounds.width/2)-70,40,140,44))
btnComment.setTitle("Comments", forState:.Normal)
btnComment.addTarget(self, action:"openComments", forControlEvents:.TouchUpInside)
OverlayView.addSubview(btnComment)
AVPlayerVC.view.addSubview(OverlayView);
}
func playNext() {
prevItem = AVPlayerVC.player?.currentItem
OverlayView.hidden = true
commmentQueuePlayer.advanceToNextItem()
}
func replayVideo() {
OverlayView.hidden = true
AVPlayerVC.player?.currentItem?.seekToTime(kCMTimeZero)
AVPlayerVC.player?.play()
}
func previousVideo() {
OverlayView.hidden = true
if prevItem != AVPlayerVC.player?.currentItem {
if (commmentQueuePlayer.canInsertItem(prevItem!, afterItem:AVPlayerVC.player?.currentItem)) {
//commmentQueuePlayer.insertItem(prevItem!, afterItem:AVPlayerVC.player?.currentItem)
commmentQueuePlayer.replaceCurrentItemWithPlayerItem(prevItem)
prevItem = AVPlayerVC.player?.currentItem
replayVideo()
}
} else {
replayVideo()
//Else display alert no prev video found
}
}
func stopedPlaying() {
if prevItem == nil {
prevItem = AVPlayerVC.player?.currentItem
}
OverlayView.hidden = false
}
Tại thiết lập ban đầu chúng tôi đặt AVPlayerController, AVQueuePlayer vv ... tại thời điểm đó chúng ta có thể thêm lớp phủ trên AVPlayerController
Đối với mục trước không có sẵn trực tiếp và theo tài liệu, mục sẽ bị xóa khi mục tiếp theo được phát, vì vậy chúng tôi có hai tùy chọn như replaceCurrentItemWithPlayerItem
hoặc insertItem(item: AVPlayerItem, afterItem: AVPlayerItem?)
Nếu bạn cần kiểm tra hoàn thành mã e bạn có thể kiểm tra xem nó từ: https://gist.github.com/Pyrolr/debb4fca8f608b1300e099a5b3547031
Lưu ý: Đây là giống như nguyên mẫu, nó không làm việc một cách hoàn hảo trong tất cả các trường hợp, nhưng nó có thể giúp bạn trong việc tìm hiểu các chức năng cơ bản bạn wnat và bạn có thể cải thiện/tối ưu hóa dựa trên yêu cầu của bạn
Bạn có thể làm điều đó dễ dàng từ dự án đã có tại đây: http://stackoverflow.com/a/36389738/1151916 Chỉ bạn cần thêm các nút và nhãn tùy chỉnh trong tệp xib và chúng sẽ được hiển thị cho người dùng . Bạn muốn có chức năng nào? – Ramis