iOS6中橫屏的處理方法

IOS6之後,若想在項目中支持橫屏,咱們首先須要在plist文件中添加支持橫屏的設置,不然有些代碼設置將會失效。ide

有來那個方式設置:函數

一、在pilist的Supported interface orientations 字段中添加測試

二、在Xcode的設置中勾選code

如今咱們來看決定屏幕方向的幾個函數:繼承

在IOS6以前,咱們只需經過一個函數文檔

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

就能夠支持指定控制器的旋轉。經過新的文檔,咱們能夠看到:io

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

咱們經過下面兩個方法來代替:方法

//是否容許屏幕旋轉im

-(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的方式,而後直接在彈出的控制器中寫那兩個方法便可。這是最簡單的途徑了。

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索