更新: この問題は 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
ですか?なぜそれはビデオプレーヤーのインターフェースに干渉するのですか? そして、それを取り除く方法は?たぶん、私が見ていない非常に明白な理由がありますか?
助けてくれてありがとう!