2014-12-22 44 views
12

reddederken yönlendirmeyi dikey olarak değiştir benim app sadece bir portre uygulaması, ama bir AVPlayerViewController kullanarak, canlı akışı görüntüleyen bir view controller var.iOS 8 - tam ekran AVMlayerViewController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showLiveStream" { 

     SVProgressHUD.show() 
     var queue: dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 

     dispatch_async(queue, { 
      let streamURL = NSURL(string: liveStreamURL) 
      let playerItem = AVPlayerItem(URL: streamURL) 
      let player = AVPlayer(playerItem: playerItem) 

      dispatch_async(dispatch_get_main_queue(), { 
       SVProgressHUD.dismiss() 
       var playerViewController = segue.destinationViewController as AVPlayerViewController 
       playerViewController.player = player 
      }) 
     }) 
    } 
} 

:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int { 
    var orientation = UIInterfaceOrientationMask.Portrait 

    if let presentedController = window?.rootViewController?.presentedViewController? { 

     if presentedController.isKindOfClass(NSClassFromString("AVFullScreenViewController").self) { 
      orientation = .AllButUpsideDown 
     } else if let navController = presentedController as? UINavigationController { 
      if navController.topViewController.isKindOfClass(NSClassFromString("AVFullScreenViewController").self) { 
       orientation = .AllButUpsideDown 
      } 
     } 
    } 

    return Int(orientation.rawValue) 
} 

Bu benim AVPlayer initialize diyoruz nasıl:

Ben AppDelegate.swift bu yöntemi yazdığı oyuncunun tam ekran görünümü için manzara izin vermek için Sorun: Oynatıcının tam ekran görünümünü açtığımda, manzaraya geçip ardından tam ekran görüntüsünü kapatmak için "Tamamlandı" yı tıklattığınızda, uygulamam manzarada kalıyor. Ama tekrar resme dönmesini istiyorum. Bunu nasıl yapabilirim?

+0

'AVPlayerViewController' alt sınıfını' AVFullScreenViewController' sınıfınızla mı sınıflandırıyorsunuz? –

+0

@LaurentRivard Hayır, “AVFullScreenViewController” sınıfı, “MPInlineVideoFullscreenViewController” çalışma zamanı sınıfına eşdeğer AVKittir. –

cevap

0

application(_:supportedInterfaceOrientationsForWindow:) uygulanmak yerine, numaralı görünüm denetleyicisini her birgörüntü denetleyicisini deneyin. Örneğin Yani:

override func supportedInterfaceOrientations() -> Int { 
    return Int(UIInterfaceOrientationMask.Portrait.rawValue) 
} 

Bu video oynatıcı görevden böylece zaman görünümü denetleyicisi, manzara görüntülenemeyen sağlayacaktır, bu düz geri bir portre penceresine gelecek.

Güncelleme Objective-C: i Bu sorunu gidermek ile yeni bir sınıf oluşturmak için yaptığı şey

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 
+0

Lütfen bu cevap için nesnel c ekleyebilir misiniz? – Ibdakine

+1

bu benim için çalışmıyor. – LightningStryk

0

AppDelegate ve Gerekli Görünümünde Bu Satır Ekle Kontrolör

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    //LandScapeMode:- UIInterfaceOrientationMaskLandscape; 
    //PortraitMode:- 
    return UIInterfaceOrientationMaskPortrait 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    //LandScapeMode:- UIInterfaceOrientationLandscapeRight; 
    // ProtraitMode:- 
    return UIInterfaceOrientationPortrait 
} 
0

Bir 'viewDidLayoutSubviews' işlevi ve geçersiz kılın!

final class NewMoviePlayerViewController: AVPlayerViewController { 
    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 

     if view.bounds == contentOverlayView?.bounds { 
      let value = UIInterfaceOrientation.portrait.rawValue 
      UIDevice.current.setValue(value, forKey: "orientation") 
     } 
    } 
}