Кадр AVPlayerLayer не помещается в UIView для видеоплеера

Я пытаюсь отобразить видео с помощью этого кода:

self.videoPlayer = AVPlayer.init(url: videoUrl as URL)
let playerLayer = AVPlayerLayer.init(player: self.videoPlayer)
self.videoPlayerView.layer.addSublayer(playerLayer)
playerLayer.frame =  self.videoPlayerView.layer.bounds
self.videoPlayer.play()

но он не отображается внутри UIView (т.е. self.videoPlayerView). Он просто показывает тонкий прямоугольник в середине экрана, как показано на скриншоте. Как это исправить? скриншот


person Oluwatobi Omotayo    schedule 21.10.2016    source источник


Ответы (2)


попробуйте это... установите рамку слоя равной рамке вида

self.videoPlayer = AVPlayer.init(url: videoUrl as URL)
let playerLayer = AVPlayerLayer.init(player: self.videoPlayer)
self.videoPlayerView.layer.addSublayer(playerLayer)
playerLayer.frame =  self.videoPlayerView.frame
self.videoPlayer.play()
person Ittai Oren    schedule 09.04.2017

Во-первых, код на Swift, а не на Obective-C, я бы изменил этот тег! Во-вторых, как вы определяете кадр videoPlayerView? В-третьих, вы меняете фрейм playerLayer после того, как он уже был добавлен. При этом рамка визуально не изменится! Установите кадр, прежде чем добавлять его в качестве подслоя. Надеюсь, это поможет.

person jniegsch    schedule 21.10.2016
comment
я так и сделал, но не исправил - person Oluwatobi Omotayo; 21.10.2016
comment
Вы изменили, где вы установили кадр playerLayer? Если да, то мой второй пункт остается в силе, где и как вы устанавливаете фрейм videoPlayerViews? - person jniegsch; 21.10.2016
comment
В раскадровке с использованием автомакета - person Oluwatobi Omotayo; 21.10.2016
comment
Каким методом вы звоните? - person jniegsch; 21.10.2016
comment
Хорошо, я нашел способ обойти это, используя пример, приведенный в документации Apple для AVPlayerLayer A удобный способ использования AVPlayerLayer в iOS или tvOS — в качестве вспомогательного слоя для UIView - person Oluwatobi Omotayo; 21.10.2016