[AVPlayerLayer superview]: нераспознанный селектор отправлен экземпляру в Swift

В моей раскадровке я поместил представление внутри своего UIViewController. Я добавил туда необходимые параметры:

введите здесь описание изображения

и связал его с моим кодом:

введите здесь описание изображения

В коде у меня есть:

import AVKit
import AVFoundation

@IBOutlet weak var yawpVideo: AVPlayerLayer!

override func viewDidLoad() {

    let url:NSURL = NSURL(string: videoURL)!

    player = AVPlayer(URL: url)
    yawpVideo.player = player
    player.play()
}

и это вызывает ошибку:

*** Terminating app due to uncaught exception
 'NSInvalidArgumentException', reason: '-[AVPlayerLayer superview]:
 unrecognized selector sent to instance 0x7fe320cb2030'

Можете ли вы сказать мне, что вызывает эту проблему и как ее можно исправить?


person user3766930    schedule 22.09.2016    source источник


Ответы (1)


UIView не является CALayer, вы не можете добавить AVPlayerLayer в раскадровку.

Вместо этого, после загрузки представления, программно добавьте playerLayer вашего AVPlayer в слой UIView.

Измените свою розетку на UIView:

@IBOutlet weak var yawpVideo: UIView!

Затем добавьте слой:

player = AVPlayer(URL: url)
let playerLayer = AVPlayerLayer(player: player)
yawpVideo.layer.addSublayer(playerLayer)
person JAL    schedule 22.09.2016
comment
Ок, спасибо чувак, заработало, еще пришлось поставить некоторые ограничения программно: playerLayer.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height), теперь видео в центре экрана - как сделать так, чтобы оно начиналось с самого верха экрана? - person user3766930; 22.09.2016
comment
@user3766930 user3766930 это не ограничения, вы вручную устанавливаете рамку слоя. Если вы хотите, чтобы слой игрока находился в центре экрана, добавьте ограничения в представление yawpVideo в раскадровке. - person JAL; 22.09.2016