5

contentOverlayView を使用して、AVPlayerViewController に追加のボタンを追加しようとしています。問題は、プレーヤーのコントロールが表示されているときにのみボタンを表示したいということです。この段階では不可能だと感じていますが、確認したかったのです。これが現在可能かどうか誰かが確認できますか?

4

1 に答える 1

1

AVPlayerViewController を全画面で実行していると仮定すると、コントローラのビューに UITapGestureRecognizer を追加できます。ただし、いくつかの UIGestureRecognizerDelegate メソッドが必要でした。contentOverlayView ではなく、AVPlayerViewController のビューにサブビューを追加します。

let controller = AVPlayerViewController()
    controller.player = self.player
    let yourView = controller.view
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(VideoPlayer.onCustomTap(_:)))
    tapGestureRecognizer.numberOfTapsRequired = 1;
    tapGestureRecognizer.delegate = self
    yourView.addGestureRecognizer(tapGestureRecognizer)

    self.yourSubView = YourView()

    controller.view.addSubview(yourSubView)
    parentViewController.modalPresentationStyle = .FullScreen;
    parentViewController.presentViewController(controller, animated: false, completion: nil)

UIGestureRecognizerDelegate をクラスに追加し、タッチ ビューの高さと幅が画面の高さと幅であることを確認します。これは明らかにハッキーですが、これを機能に近づけるために私が見つけた唯一の方法です。プレーヤー コントロールは、プレイ開始から 5 秒で消え、最後に再び表示されます。これは、AVPlayer のオブザーバーで解決できる可能性があります。私はこのルートを試してみましたが、ffwd ボタンのようなものは、カスタム プレーヤーのためにこれを放棄するようになります。

extension VideoPlayer: UIGestureRecognizerDelegate {

func onCustomTap(sender: UITapGestureRecognizer) {

    if yourSubView.alpha > 0{
        UIView.animateWithDuration(0.5, animations: {
            self.yourSubView.alpha = 0;
        })

    } else {
        UIView.animateWithDuration(0.5, animations: {
            self.yourSubView.alpha = 1;
        })
    }
}

public func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {

    if let _touchView = touch.view {

        let screenRect:CGRect = UIScreen.mainScreen().bounds
        let screenWidth :CGFloat = screenRect.size.width;
        let screenHeight:CGFloat  = screenRect.size.height;

        if _touchView.bounds.height == screenHeight && _touchView.bounds.width == screenWidth{
            return true
        }

    }
    return false
}

public func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
}
于 2016-06-07T16:06:01.180 に答える