取决于 PlaybackControl Visibity 如何显示和隐藏添加到 contentOverlayView 中的自定义 subview ?

我想像 Youtube TVOS 应用那样做。

我尝试使用 UIPressesEvent 但它没有给我确切的触摸事件。它给了我这些:

  override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
    for item in presses {
        switch item.type {
        case .Menu:
            self.customViews.alpha = 0
        case .PlayPause:
            self.player?.pause()
            self.customViews.alpha = 0
        default:
            self.setVisibilityToPreviewView()
        }
      }
    }

 func setVisibilityToPreviewView () { //This wont work in all cases.
      if self.previewView.alpha == 1 {
         self.previewView.alpha = 0
      } else {
         self.previewView.alpha = 1
      }
    }

但是有了这个 Touch 事件,我只能显示和隐藏 subview 。
播放控件 Hidden 时,它应该是隐藏的。

如果我得到 PlayBackControl Visibility 值,我不需要担心隐藏这些 subview 。

Apple 正在使用 AVNowPlayingPlaybackControlsViewController 。它不对开发人员开放。

所以我需要找到其他更好的方法来做到这一点。

请指导我如何做。

最佳答案

您可以注册一个 tapGesture 识别器,然后将其 allowPressTypes 属性设置为 UIPressType.Select ,就像这样

let tapRecognizer = UITapGestureRecognizer(target: self, action: "onSelect:")
tapRecognizer.allowedPressTypes = [NSNumber(integer: UIPressType.Select.rawValue)];
self.view.addGestureRecognizer(tapRecognizer)

在您的操作按钮内显示或隐藏自定义叠加层。

示例: 将此代码添加到 View Controller 中,然后点击(在远程触摸区域前面的空白区域选择),您将在控制台上看到一条消息。
override func viewDidLoad() {
        super.viewDidLoad()
        let tapGesture = UITapGestureRecognizer(target: self, action: "onSelect")
        tapGesture.allowedPressTypes = [NSNumber(integer: UIPressType.Select.rawValue)]
        self.view.addGestureRecognizer(tapGesture);
    }
    func onSelect(){
        print("this is select gesture handler method");
    }

更新: 下面是创建 AVPlayerController 并将 tapGestureRecognizer 注册到 playervc.view 的代码。
override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        playContent()
    }
    func playContent(){
        let urlString = "<contentURL>"
        guard let url = NSURL(string: urlString) else{
            return
        }
        let avPlayer = AVPlayer(URL: url)
        let playerVC = AVPlayerViewController()
        playerVC.player = avPlayer
        self.playerObj = playerVC

        let tapGesture = UITapGestureRecognizer(target: self, action: "onSelect")
        tapGesture.allowedPressTypes = [NSNumber(integer: UIPressType.Select.rawValue)]
        self.view.addGestureRecognizer(tapGesture);

        playerVC.view.addGestureRecognizer(tapGesture)
        self.presentViewController(playerVC, animated: true, completion: nil);

    }

试试这个,我认为它应该可以正常工作。

关于swift - AVPlayercontroller - 添加叠加 subview ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36667141/

10-15 09:36