web-dev-qa-db-ja.com

AVPlayerLayerがUIViewフレームにバインドされていません

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();

これはビデオのコンテナ(青色)です:

This is the view:

制約: Constraints:

最終結果: - enter image description here

ビデオがUIVIew座標にバインドされていない理由がわかりません。それをコントローラーのスーパービューにバインドすれば、問題ありません。

15
Jornia Kabakum

ビューのフレームが変更されたときにサブレイヤーのサイズが自動的に変更されることはありません。手動で変更する必要があります。 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に変更してください。

27
almas

ViewDidLoadイベントにAVPlayerLayerを追加しています...制約が適用される前に。

0
Jornia Kabakum