4

更新: この問題は AVPlayerControllerView とは関係ありません。以下の私の回答を参照してください。最初はクラスの名前にAVTouchIgnoringView戸惑いましたが、それも問題を考える上で間違った道でした。

===

ご存知のように、Media Playerフレームワークは iOS 9 で非推奨になったためAVKit、新しいプロジェクトで代わりに試すことにしました。私の仕事は、コレクション ビューのヘッダー ( ) 内に埋め込まれたビデオ プレーヤーUICollectionReusableViewと、その下の任意のセルを表示することです。

これは私がコードでこれを行った方法です:

override func viewDidLoad() {
  super.viewDidLoad()

  apiManager.loadVideo() { video in
    let player = AVPlayer(URL: video.url)
    self.playerViewController.view.hidden = true
    self.playerViewController.player = player
    self.addChildViewController(self.playerViewController)

    headerView.videoContainerView.addSubview(self.playerViewController.view)
    Cartography.layout(self.playerViewController.view,
      headerView.videoContainerView) { (v1, v2) in
        v1.leading == v2.leading
        v1.bottom == v2.bottom
        v1.trailing == v2.trailing
        v1.top == v2.top
    }

    self.playerViewController.didMoveToParentViewController(self)
    self.playerViewController.addObserver(self,
      forKeyPath: KeyPath.ReadyForDisplay, options: nil, context: nil)
  }
}

override func observeValueForKeyPath(keyPath: String,
  ofObject object: AnyObject, change: [NSObject : AnyObject],
  context: UnsafeMutablePointer<Void>) {
    if keyPath == KeyPath.ReadyForDisplay {
      dispatch_async(dispatch_get_main_queue()) {
      self.finishConstructingInterface()
    }
  }
}

func finishConstructingInterface() {
  if playerViewController.readyForDisplay == false {
    return
  }
  playerViewController.removeObserver(self, forKeyPath: KeyPath.ReadyForDisplay)
  playerViewController.view.hidden = false
  playerViewController.view.userInteractionEnabled = true
}

この種の動作、プレーヤーは期待どおりに動作しますが、奇妙な問題が 1 つあります。デフォルトのインターフェイスがタッチに反応しませんAVTouchIgnoringViewこの問題を理解するために、ビュー デバッガーを調べたところ、インターフェイスをブロックしている上部にあることがわかりました。

上部の AVTouchIgnoringView

だから私の質問は次のとおりです:それは何AVTouchIgnoringViewですか?なぜそれはビデオプレーヤーのインターフェースに干渉するのですか? そして、それを取り除く方法は?たぶん、私が見ていない非常に明白な理由がありますか?

助けてくれてありがとう!

4

2 に答える 2

6

わかりました、問題を解決しました。それは とはまったく関係AVPlayerViewControllerありません。その理由は、私の場合のプレーヤー ビュー コンテナーは のサブクラスでありUIImageView、NOにオーバーライドされるためです。 userInteractionEnabled

このプロパティは UIView 親クラスから継承されます。このクラスは、このプロパティのデフォルト値を NO に変更します。

したがって、この属性を YES に設定すると、この問題が修正されました。この質問を残しておくべきか、読者をやや混乱させるので削除するべきかわかりません。

于 2015-08-26T15:20:00.447 に答える