#ios #swift #viewcontroller
Вопрос:
Экран входа в систему, который я разрабатываю, почти завершен, но не может правильно отображать текстовые поля имени пользователя и пароля после загрузки контроллера представления
Следующая функция выполняется при загрузке представления — она правильно воспроизводит видео и правильно отображает как изображение, так и кнопку входа, а также, по-видимому, отображает текстовые поля в течение доли секунды, пока видео полностью не загрузится и не будет воспроизведено.
func playVideo() {
guard let path = Bundle.main.path(forResource: "videoFile", ofType: "mp4") else {
return
}
let asset: AVAsset = AVAsset(url: URL(fileURLWithPath: path))
let playerItem = AVPlayerItem(asset: asset)
let queuePlayer = AVQueuePlayer(playerItem: playerItem)
self.playerLooper = AVPlayerLooper(player: queuePlayer, templateItem: playerItem)
let playerLayer = AVPlayerLayer(player: queuePlayer)
playerLayer.frame = self.view.bounds
playerLayer.videoGravity = .resizeAspectFill
self.videoLayer.layer.addSublayer(playerLayer)
queuePlayer.play()
videoLayer.bringSubviewToFront(img)
videoLayer.bringSubviewToFront(usernameTF)
videoLayer.bringSubviewToFront(passwordTF)
videoLayer.bringSubviewToFront(signinButton)
}
Есть какие-нибудь идеи, что может быть причиной этого?
Комментарии:
1. Вы можете создать представление контейнера, содержащее часть входа (img,имя пользователя,пароль, btn), а затем сделать его подвидом для просмотра воспроизведения или контейнером, содержащим представление проигрывателя.
2. Да, опция просмотра контейнера-хороший способ сделать это. Просто создайте контейнер, добавьте playerview и другие ваши компоненты. Таким образом, ваша иерархия представлений выглядит следующим образом: представление контейнера — просмотр игрока — другое представление (img, имя пользователя, пароль, кнопка входа и т. Д.)
Ответ №1:
Вы можете изменить этот код в соответствии с вашими потребностями.
var player : AVPlayer?
var playerViewController : AVPlayerViewController?
func playLiveUrl(url:String){
let videoURL = URL(string: "http://bla blah.com")
self.player = AVPlayer(url: videoURL!)
self.playerViewController = AVPlayerViewController()
playerViewController?.player = self.player
playerViewController?.view.frame = self.topPlayerView.frame
playerViewController?.player?.play()
self.topPlayerView.addSubview(playerViewController?.view ?? UIView()) // Container topPlayerView which contains a player
}
var topPlayerView : UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
view.backgroundColor = .black
return view
}()