Mam UIViewcontroller, który zawiera AVPlayerViewController z AVPlayer. Chcę włączyć obrót dla AVPlayerViewController (gdy wideo jest na pełnym ekranie) i wyłączyć wszelkie obracanie dla UIViewController. Jak włączyć rotację tylko w przypadku filmów wideo (na pełnym ekranie) w mojej aplikacji?iOS: AVPlayerViewController umożliwia pełny obrót w orientacji pionowej aplikacji
Odpowiedz
Swift 2.2 W AppDelegate aby umożliwić obrót dla gracza:
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
guard let vc = (window?.rootViewController?.presentedViewController) else {
return .Portrait
}
if (vc.isKindOfClass(NSClassFromString("AVFullScreenViewController")!)) {
return .AllButUpsideDown
}
return .Portrait
}
nie tworzyć i używać podklasę AVPlayerViewController do tyłu w tryb portretu, gdy tryb wyjście gracz pełnoekranowym :
class YourVideoPlayer: AVPlayerViewController {
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if view.bounds == contentOverlayView?.bounds {
UIDevice.currentDevice().setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation")
}
}
Awesome! Gdzie znalazłeś informacje o avplayerze? –
Musisz włączyć dopuszczalne obroty na poziomie projektu, a następnie ograniczyć obrót we wszystkich kontrolerach widoku, których NIE chcesz obracać. np. jeśli masz 5 kontrolerów widoku, musisz ograniczyć rotację na 4 z nich i zezwalać tylko na obrót na kontrolerze odtwarzacza. Można zobaczyć więcej na ten temat tutaj Handling autorotation for one view controller in iOS7
Dla mnie to było lepsze. Wystarczy przedłużyć AVPlayerViewController:
import AVKit
import UIKit
class AVPlayerViewControllerRotatable: AVPlayerViewController {
override var shouldAutorotate: Bool {
return true
}
}
Swift 4
Czy realizowane 'supportedInterfaceOrientations' odpowiednio? – matt
@matt Właśnie zwracam UIInterfaceOrientationMaskPortrait w supportedInterfaceOrientations method. UIViewController nie obraca się i AVPlayer do. – ton252