19

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 座標に限定されない理由がわかりません。コントローラーのスーパービューにバインドすればOKです。

4

4 に答える 4

40

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

于 2016-02-16T22:27:33.043 に答える
0

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

于 2016-02-16T22:24:18.753 に答える