Youtube-video nicht spielen im landscape-Modus in iOS 8
Meine app besteht in der Funktionalität der Wiedergabe von videos, sowohl in Landschaft und portrait-Modus.videos kann youtube auch alles gut funktioniert bis iOS 7 aber jetzt youtube-videos funktionieren nicht im landscape-Modus auf iOS 8.
mein code:
- (NSUInteger)application:(UIApplication *)applicationsupportedInterfaceOrientationsForWindow:(UIWindow *)window {
if ([[window.rootViewController presentedViewController]
isKindOfClass:[MPMoviePlayerViewController class]] || [[window.rootViewController presentedViewController] isKindOfClass:NSClassFromString(@"MPInlineVideoFullscreenViewController")]) {
return UIInterfaceOrientationMaskAllButUpsideDown;
} else {
if ([[window.rootViewController presentedViewController]
isKindOfClass:[UINavigationController class]]) {
//look for it inside UINavigationController
UINavigationController *nc = (UINavigationController *)[window.rootViewController presentedViewController];
//is at the top?
if ([nc.topViewController isKindOfClass:[MPMoviePlayerViewController class]]) {
return UIInterfaceOrientationMaskAllButUpsideDown;
//or it's presented from the top?
} else if ([[nc.topViewController presentedViewController]
isKindOfClass:[MPMoviePlayerViewController class]]) {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
}
}
return UIInterfaceOrientationMaskPortrait;
}
Alles gut funktioniert bis iOS 7 aber aufhören zu arbeiten auf iOS 8.
Jede Hilfe zu schätzen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sowie seine manchmal dumm, um Ihre eigene Frage zu beantworten, aber seine gut, um anderen zu helfen die vor dem gleichen problem.
in iOS 8 statt Kontrolle für MPInlineVideoFullscreenViewController wir müssen prüfen, AVFullScreenViewController. So ist die komplette Methode für alle iOS-Versionen, die ich.e iOS 8 und weniger.
Update :
Funktioniert in iOS 9 als auch
Habe ich ähnlichen code in meine app, die brach auch in iOS8.
Wollte ich gerade posten meine version dieses Updates, falls es hilft jemand.
Der wesentliche Unterschied ist, ich bin nur die Prüfung gegen die meisten top-controller vorgestellt.
Ich denke das macht mehr Sinn als die verschachtelten Bedingungen versuchen, herauszufinden, welche Art von vc präsentiert eine andere vc.
Wie auch immer, ich habe dies in meiner app delegieren, und es arbeitet groß in der 8.
Update:
Eine Sache hinzufügen, wenn Sie bemerken, dass Ihr status-bar zu brechen, nachdem Sie kommen zurück, um Ihren controller aus einem video-Landschaft zu setzen, ist die Statusleiste nicht ausgeblendet false in
viewWillLayoutSubviews
.Für diejenigen, die schnelle, ein paar zusätzliche Hinweise. Diese Methode (
application:supportedInterfaceOrientationsForWindow
) sollten in Ihrem AppDelegate-Klasse oder was auch immer Sie sich gesetzt haben, zu@UIApplicationMain
. Um Zugriff auf dieMPMoviePlayerViewController
- Klasse, müssen Sie daran denkenimport MoviePlayer
.Zweite, die
UIInterfaceOrientationMask
Wert ist nicht kompatibel mit der schnellen version des Delegaten von selbst, so müssen Sie ZugangrawValue
und transformieren, die daraus resultierendenUint
in eineInt
. Hier ist die Swift-Lösung für diejenigen, die in not sind.Dies ist eine Lösung, bei Swift getestet unter iOS7 und iOS8. Müssen Sie diese Methode, um Ihre AppDelegate Klasse.
AppDelegate.swift
Ich konnte nicht erkennen, die
AVFullScreenViewController
in meiner app auf iOS 8 Golden Master, aber die Suche nachAVPlayerView
funktioniert der trick.UIViewController+VideoAutorotate.h
UIViewController+VideoAutorotate.m
AVFullScreenViewController
verwenden[self class]
wie Linien für iOS 6 in meinem code.Hier ist Swift 3-version für iOS 10.1. Ich habe geändert, Anthony Persaud Antwort hier. Um zu überprüfen
if presentedController.isKind(of: MPMoviePlayerViewController.self)
müssen Sieimport MediaPlayer
an der Spitze.