Проблема с отображением подпросмотров над видео | Swift 5

#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
        }()