2017-03-22 2 views
1

Ich habe eine Containeransicht, die das Video spielt, wenn das Gerät im Hochformat ist. Ich möchte, dass das Video automatisch im Vollbildmodus abgespielt wird, wenn das Gerät gedreht wird. Ich habe diesen Code versucht, das erkennt, wenn das Gerät gedreht wird, aber es, den Behälter auf Vollbild nichtswift 3 - Video im Vollbildmodus abspielen, wenn es in die Landschaft gedreht wird

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) { 

    if (UIDevice.current.orientation.isLandscape) { 

     videoContainerView.frame = self.view.frame 
     // self.videoContainerView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) // this didn't work to.... 
     print("Device is landscape") 
    } 
    else{ 
     print("Device is portrait") 
    } 

} 

Das Video ist auf einem avplayer Spieler zu ändern. danke

+0

Mai von 'layoutConstraints' kann Ihr Problem helfen? Verbinden Sie einfach Ihre 'videoView' mit' containerView' – RrrangeTop

+0

sie sind bereits zusammen gebunden ... –

+0

I Eine Lösung gefunden, indem Sie den AvplayerController auf die Bildschirmgröße gesetzt, wenn gedreht. Jetzt muss ich nur noch einen Weg finden, die navBar zu schließen –

Antwort

1

O.k. Also habe ich es geschafft, das Video im Vollbildmodus abzuspielen, indem ich das Video zu einem AVPlayerLayer hinzufüge und seine Größe auf die Ansicht einstelle, wenn das Gerät im Querformat ist.

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) { 

    if (UIDevice.current.orientation.isLandscape) { 

        DispatchQueue.main.async { 
         self.view.didAddSubview(self.controllsContainerView) 
         self.layer = AVPlayerLayer(player: self.player!) 
         self.layer?.frame = self.view.frame 
         self.layer?.videoGravity = AVLayerVideoGravityResizeAspectFill 
         self.view.layer.addSublayer(self.layer!) 

     } 
     print("Device is landscape") 
    } 

wenn UIDevice.cuurent.orientation.islandscape == false i entfernen Subschicht und legen Sie den Blick zurück auf videoContainer Grenzen.

else{ 
     print("Device is portrait") 
     movie.view.frame = videoContainerView.bounds 
     controllsContainerView.frame = videoContainerView.bounds 
     self.layer?.removeFromSuperlayer() 


    } 

hoffe, es hilft jedem.

0

Ich fand einen anderen und besseren Weg, um dieses Problem zu lösen, weil auf diese Weise die Kontrollen sichtbar sind. Die Grundidee besteht darin, das AVPlayerViewController-Objekt in eine neue Unteransicht zu verschieben und den Rahmen auf Vollbild zu setzen. Hier ist mein Code ..

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) { 

    if (UIDevice.current.orientation.isLandscape) { 


        DispatchQueue.main.async { 
         self.playerController.player = self.player 
         self.addChildViewController(self.playerController) 
         self.view.addSubview(self.playerController.view) 
         self.playerController.view.frame = self.view.frame 

     } 
     print("Device is landscape") 
    } 

Wenn das Gerät zurück in das Hochformat gedreht wird, fügen Sie diese Unteransicht zum vorherigen Bild hinzu und stellen Sie die Größe erneut ein. Hier ist mein Code.

else{ 
     print("Device is portrait") 
     videoContainerView.addSubview(playerController.view) 
     playerController.view.frame = videoContainerView.bounds 
     controllsContainerView.frame = videoContainerView.bounds 
    } 
} 

Hoffe es hilft. Viel Glück!

Verwandte Themen