2017-10-09 77 views
0

iOS 11引入了滑动关闭AVPlayerController。我有针对幼儿的应用程序,因此屏幕很容易被滑动,导致视频关闭。无论如何删除手势关闭播放器?禁用滑动关闭AVPlayerController

我已经尝试向AVPlayerController的视图添加一个手势覆盖,但它不起作用。 How can I add Swipe Gesture to AVPlayer in swift 3有一个可能的解决方案,但必须有一个更清洁的方式

+1

你不应该使用AVPlayerController,你必须写自己的实现视频播放器与AVPlayer。 – Vakas

+0

为什么你不应该使用AVPlayerController?我们使用它的许多功能,因此目前不能编写我们自己的实施方案 –

+0

如果您找到解决方案,请告知我们。我也在找到禁用滑动关闭的方法 –

回答

0

我设法解决问题。正如@Vakas评论说的,AVPlayerController不应该被分类。我最初将其分类并使用模态赛格呈现。这是造成这个问题的原因。

为了解决这个问题,我创建了另一个视图控制器,它嵌入了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。

0

如果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) 
      } 
     } 
    } 
}