У меня есть локальное видео, воспроизводимое с использованием AVPlayer
и AVPlayerLayer
(Swift, iOS 8.2), и мне нужно изменить размер AVPlayerLayer
(introPlayerLayer
) при изменении размера его родительского вида (introView
), в том числе при изменении ориентации. Пока ничего из того, что я пробовал, не работает, а playerLayer
имеет неправильный размер и положение.
AVPlayer
настраивается с использованием локального видео в формате mp4, а AVPlayerLayer
инициализируется с помощью этого проигрывателя. Затем слой добавляется в качестве подслоя к родительскому виду.
Вот мой код:
func playIntro() {
let path = NSBundle.mainBundle().pathForResource("intro", ofType: "mp4")
let url = NSURL.fileURLWithPath(path!)
let introPlayer = AVPlayer(URL: url)
introPlayer.allowsExternalPlayback = false
var introPlayerLayer = AVPlayerLayer(player: introPlayer)
introView.layer.addSublayer(introPlayerLayer)
introPlayerLayer.frame = introView.bounds
NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: introPlayer.currentItem)
introView.hidden = false
introPlayer.play()
}
Должен ли я добавлять AVPlayerLayer
в качестве подслоя UIView
или должен создавать подкласс родительского контейнера (UIView
), как показано в разделе «Вид игрока» на https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback. HTMLа>. Если да, то как мне написать этот подкласс PlayerView
(показан в Objective-C) в Swift? Заранее благодарим вас за любую помощь.