iOS 11引入了一个滑动来关闭AVPlayerController。我有针对幼儿的应用程序,因此屏幕很容易刷,导致视频关闭。无论如何要删除关闭播放器的手势吗?
我尝试在AVPlayerController的视图中添加手势覆盖,但它不起作用。在How can I add Swipe Gesture to AVPlayer in swift 3上有一个可能的解决方案,但必须有一个更清洁的方式
答案 0 :(得分:1)
我成功解决了问题。正如@Vakas评论的那样,AVPlayerController不应该是子类。我最初将其子类化并使用模态segue进行呈现。这导致了这个问题。
为了解决这个问题,我创建了另一个嵌入AVPlayerController的视图控制器。
import UIKit
import AVKit
class PlayerViewController: UIViewController, AVPlayerViewControllerDelegate {
var videoRecord: Video!
var presentingController = ""
var videos = [Video]()
var presentingPlaylist: Playlist?
let playerViewController = TFLPlayerController()
override func viewDidLoad() {
super.viewDidLoad()
playerViewController.delegate = self
playerViewController.videoRecord = videoRecord
playerViewController.videos = self.videos
playerViewController.allowsPictureInPicturePlayback = false
// Add the original AVPlayerController in here
self.addChildViewController(playerViewController)
let playerView = playerViewController.view
playerView?.frame = self.view.bounds
self.view.addSubview(playerView!)
playerViewController.didMove(toParentViewController: self)
}
}
我基本上使用这个视图控制器将视频等属性传递给最初的子类AVPlayerController。
答案 1 :(得分:1)
如果嵌入了AVPlayerController(未显示),则控件视图中不会显示“关闭”按钮。
我的解决方案是找到带有手势识别器的子视图并删除平移手势识别器
for v in playerViewController.view.subviews {
if v.gestureRecognizers != nil {
for gr in v.gestureRecognizers! {
if gr is UIPanGestureRecognizer {
// remove pan gesture to prevent closing on pan
v.removeGestureRecognizer(gr)
}
}
}
}
答案 2 :(得分:0)
以上所有评论均未解决该问题(iOS 13+)。解决方案:
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(_:)))
avPlayerViewController.view.addGestureRecognizer(panGestureRecognizer)
其中handlePanGesture(_ :)是在屏幕上发生平移(并且视频不会移动-这是拖动问题中的问题)时将调用的方法,而avPlayerViewController是AVPlayerViewController实例。
注意:如果要防止捏/旋转和其他任何手势,则可以为每个手势添加新的UI ... GestureRecognizer。只需确保已设置所有UI ... GestureRecognizers的委托,并实现了此功能:
public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}