iOS中實現單個頁面或特定一些頁面支持橫豎屏(其他頁面只能豎屏)


 

 

 

1.首先需要Xcode中選中支持的屏幕方向

 

2.在Appdelegate中 .h

 

@property (nonatomic,assign)NSInteger allowRotate;

.m中

//此方法會在設備橫豎屏變化的時候調用
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
     if (_allowRotate == 1) {
        return UIInterfaceOrientationMaskAll;
    }else{
        return (UIInterfaceOrientationMaskPortrait);
    }
}
// 返回是否支持設備自動旋轉
- (BOOL)shouldAutorotate
{
    if (_allowRotate == 1) {
        return YES;
    }
    return NO;
}

3.在需要橫屏的vc里面添加方法

 

viewWillApplear 中

//在視圖出現的時候,將allowRotate改為1,
 AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
delegate.allowRotate = 1;

viewWillDisappear中

//在視圖出現的時候,將allowRotate改為0,
 AppDelegate * delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
   delegate.allowRotate = 0;

寫好以上代碼之后, 會發現一些問題: 當橫屏頁面直接點擊“返回”按鈕退出的時候, 頁面依然是橫屏, 而我們需要的是僅一個頁面可以橫屏,測試需要在viewWillDisappear中加入如下代碼:

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];
    }

此時就可以使app僅有設置頁面支持橫豎屏了!
此時如果app要求用戶在橫屏 豎屏的模式下改變UI(橫屏與豎屏對應不同的UI), 可以在以下方法中執行

 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    // do something before rotation  
  if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        //屏幕從豎屏變為橫屏時執行
    }else{
        //屏幕從橫屏變為豎屏時執行
    }
  }
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    // do something after rotation
//變化后執行
//旋轉后的頁面效果寫在這里

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM