IOS6中橫屏的處理方法

8gw234 9年前發布 | 21K 次閱讀 iOS開發 移動開發 IOS

IOS6以后,若想在項目中支持橫屏,我們首先需要在plist文件中添加支持橫屏的設置,否則有些代碼設置將會失效。

有來那個方式設置:

1、在pilist的Supported interface orientations 字段中添加IOS6中橫屏的處理方法

2、在Xcode的設置中勾選IOS6中橫屏的處理方法

現在我們來看決定屏幕方向的幾個函數:

在IOS6之前,我們只需通過一個函數

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

就可以支持指定控制器的旋轉。通過新的文檔,我們可以看到:

// Applications should use supportedInterfaceOrientations and/or shouldAutorotate..
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
     NS_DEPRECATED_IOS(2_0, 6_0);
//這個方法在6.0之后被標記為過時的

我們通過下面兩個方法來代替:

//是否允許屏幕旋轉

-(BOOL)shouldAutorotate{
    return YES;
}
//支持的方向
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscapeRight;
}
這是個枚舉

typedef NS_OPTIONS(NSUInteger, UIInterfaceOrientationMask) {
    UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait),
    UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft),
    UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight),
    UIInterfaceOrientationMaskPortraitUpsideDown=(1 << UIInterfaceOrientationPortraitUpsideDown),
    UIInterfaceOrientationMaskLandscape = (UIInterfaceOrientationMaskLandscapeLeft 
                                        | UIInterfaceOrientationMaskLandscapeRight),
    UIInterfaceOrientationMaskAll = (UIInterfaceOrientationMaskPortrait 
                                    | UIInterfaceOrientationMaskLandscapeLeft
                                    | UIInterfaceOrientationMaskLandscapeRight 
                                    | UIInterfaceOrientationMaskPortraitUpsideDown),
    UIInterfaceOrientationMaskAllButUpsideDown = (UIInterfaceOrientationMaskPortrait 
                                    | UIInterfaceOrientationMaskLandscapeLeft 
                                    | UIInterfaceOrientationMaskLandscapeRight),
};

通過這兩個函數,如果我們需要某個控制器強制方向,我們可以設置支持單一的方向,即可達到目的。

注意:

如果你們項目中的RootViewController是導航,你會發現,你在Push出來的視圖中添加剛才的代碼并沒有起作用,原因是導航,并沒有進行設置,我們創建一個文件,繼承于NavigationController。在里面重寫剛才的方法,這么做后,屏幕確實橫了過來,并且這個導航push的所有子界面都將橫屏,這也不是我們想要的效果。我們想自由的控制每個push出來的界面的屏幕方向,可以在導航里這么做:

-(BOOL)shouldAutorotate{
    return [self.topViewController shouldAutorotate];
}
//支持的方向
- (NSUInteger)supportedInterfaceOrientations {
    return [self.topViewController supportedInterfaceOrientations];;
}

我們還需要做一些處理,經過我的測試,導航必須在pop后才會重新調用這些函數,所以我的方法是這樣做:彈出一個中間控制器后再POP回來

@implementation ViewController2

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.navigationController pushViewController:[[ViewController3 alloc]init] animated:YES];
}
@implementation ViewController3

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.navigationController popViewControllerAnimated:YES];
}

這樣做,我們就可以自由的控制每個視圖控制器的方向了。

同理,如果根視圖控制器是tabBar,則我們需要在tabBar中做操作。

如果我們大多是的視圖控制器都是一個方向的,只有偶爾的幾個會不同,這時候,我們其實可以采取presentationController的方式,然后直接在彈出的控制器中寫那兩個方法即可。這是最簡單的途徑了。

 本文由用戶 8gw234 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!