有時我們的APP並沒有適配橫屏的需求,但是在個別視頻播放界面,我們需要在播放視頻的時候橫屏,退出全屏的時候不能橫屏,但是有時候並沒有原生API並沒有給出解決方案。
這個解決方法比較容易
在 APPDelegate.h 文件中增加屬性:是否支持橫屏
/*** 是否允許橫屏的標記 */ @property (nonatomic,assign)BOOL allowRotation;
在 APPDelegate.m 文件中增加方法,控制全部不支持橫屏
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { if (self.allowRotation) { return UIInterfaceOrientationMaskAllButUpsideDown; } return UIInterfaceOrientationMaskPortrait; }
這樣在其他界面想要橫屏的時候,我們只要控制 allowRotation 這個屬性就可以控制其他界面進行橫屏了。
//需在上面#import "AppDelegate.h" AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; appDelegate.allowRotation = YES; //不讓橫屏的時候 appDelegate.allowRotation = NO;即可
所以這裡可以使用 UIWindow 的通知,就可以解決
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(begainFullScreen) name:UIWindowDidBecomeVisibleNotification object:nil];//進入全屏 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endFullScreen) name:UIWindowDidBecomeHiddenNotification object:nil];//退出全屏
在退出全屏時,增加邏輯讓其強制編程豎屏,這樣當全屏播放的時候,點擊 down("完成") 時,就會自動變成豎屏了。
// 進入全屏 -(void)begainFullScreen { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; appDelegate.allowRotation = YES; } // 退出全屏 -(void)endFullScreen { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; appDelegate.allowRotation = NO; //強制歸正: if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { SEL selector = NSSelectorFromString(@"setOrientation:"); NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; [invocation setSelector:selector]; [invocation setTarget:[UIDevice currentDevice]]; int val =UIInterfaceOrientationPortrait; [invocation setArgument:&val atIndex:2]; [invocation invoke]; } }亦可以建一baseViewController 其他控制器繼承base 在base裡設置禁止橫屏 某一頁面需要橫屏 設置一下即可