AVPlayerLayerをUIViewに追加しようとしています
self.player = AVPlayer(URL: NSURL(fileURLWithPath: path!))
self.playerLayer = AVPlayerLayer(player: player);
self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
self.playerLayer.frame = ctrVideo.bounds;
self.ctrVideo.layer.addSublayer(playerLayer);
player.play();
これはビデオのコンテナ(青色)です:
ビデオがUIVIew座標にバインドされていない理由がわかりません。それをコントローラーのスーパービューにバインドすれば、問題ありません。
ビューのフレームが変更されたときにサブレイヤーのサイズが自動的に変更されることはありません。手動で変更する必要があります。 UIViewをサブクラス化して、簡単にすることができます。
class VideoContainerView: UIView {
var playerLayer: CALayer?
override func layoutSublayersOfLayer(layer: CALayer) {
super.layoutSublayersOfLayer(layer)
playerLayer?.frame = self.bounds
}
}
そしてあなたのコードで:
self.player = AVPlayer(URL: NSURL(fileURLWithPath: path!))
self.playerLayer = AVPlayerLayer(player: player);
self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
self.playerLayer.frame = ctrVideo.bounds;
self.ctrVideo.layer.addSublayer(playerLayer);
self.ctrVideo.playerLayer = playerLayer;
player.play();
「ctrVideo」のそのクラスをUIViewからVideoContainerViewに変更してください。
ViewDidLoadイベントにAVPlayerLayerを追加しています...制約が適用される前に。