Ich hatte das gleiche Problem. Meine Lösung ist:
1.First aller einschalten alle Orientierungen in Ihrem Xcode-Projekt:
2.In AppDelegate.m add:
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
NSArray *stackViewControllers = self.navigationController.viewControllers;
UIViewController *rvc = [stackViewControllers objectAtIndex:stackViewControllers.count - 1];
if([rvc isKindOfClass:[VideoViewController class]])
{
id presentedViewController = [rvc presentedViewController];
NSString *viewControllerName = NSStringFromClass([presentedViewController class]);
if([viewControllerName isEqual:@"MPInlineVideoFullscreenViewController"] && [VideoViewController isVideoPlaying]) {
return UIInterfaceOrientationMaskAll;
}
}
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}
In oben Code, jedes Mal fragt das System supportedInterfaceOrientationsForWindow Sie überprüfen, ob der aktuelle ViewController ist, wo Sie haben Setzen Sie UIWebView
mit Youtube-Player eingebettet und überprüfen Sie auch, ob Video jetzt abgespielt wird (Video ist im Vollbildmodus).
HINWEIS: Ich verwende UINavigationController
, wenn Sie dies nicht tun, müssen Sie einige Änderungen vornehmen, um aktuelle viewController zu erhalten.
3.In Viewcontroller, wo ich mir UIWebView
für youtube eingebetteten Player (In meinem Fall ist es VideoViewController ist) gesetzt habe, in dem Header-Datei ist hinzuzufügen Methode:
+(BOOL)isVideoPlaying;
4 .In VideoViewController.m statische Variable hinzufügen:
static BOOL _isVideoPlaying = NO;
5.In viewDidLoad hinzufügen addObserver für Benachrichtigungen, um zu wissen, wann Video begann zu spielen und willExitPlaying:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerStarted:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerWillExitFullscreen:) name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil];
6.Auch Benachrichtigung Selektor Methoden hinzufügen:
-(void)playerStarted:(NSNotification *)notification{
_isVideoPlaying = YES;
}
-(void)playerWillExitFullscreen:(NSNotification *)notification {
_isVideoPlaying = NO;
if([AppUtils iOSVersion] < 6) //For iOS < 6.0, you must manually rotate viewController's view when fullscreen video playing is dismissed.
{
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight)
{
self.navigationController.view.userInteractionEnabled = NO;
[UIView animateWithDuration:0.5 animations:^{
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
// rotate main view, in this sample the view of navigation controller is the root view in main window
[self.navigationController.view setTransform: CGAffineTransformMakeRotation(180 * M_PI * 0.5)];
// set size of view
[self.navigationController.view setFrame:CGRectMake(0, 0, 320, 960)];
} completion:^(BOOL finished) {
self.navigationController.view.userInteractionEnabled = YES;
}];
}
}
}
7.Und, fügen Methoden in VideoViewController.m:
+(BOOL)isVideoPlaying {
return _isVideoPlaying;
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
if(!isVideoPlaying) {
return toInterfaceOrientation != UIInterfaceOrientationLandscapeLeft && toInterfaceOrientation != UIInterfaceOrientationLandscapeRight;
}
return YES;
}
All diese Tricks funktioniert gut für mich, die Unterstützung iOS 5 und später.
Hoffe es funktioniert für Sie!
Vielen Dank, es funktioniert. Ich kann Quellen für jeden zur Verfügung stellen, wenn nötig. – user2587950
@ user2587950 Kannst du mir ein Demo-Projekt schicken? Ich bekomme Fehler? Ich weiß nicht, wie ich es lösen soll. – karthikeyan