iOS6的旋屏控制技巧

来源:互联网 发布:node.js demo例子 编辑:程序博客网 时间:2024/04/30 14:41

在iOS5.1 和 之前的版本中, 我们通常利用 shouldAutorotateToInterfaceOrientation: 来单独控制某个UIViewController的旋屏方向支持,比如:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

{

   return toInterfaceOrientation ==UIInterfaceOrientationMaskPortrait;

}

但是在iOS6中已经被废弃了,使用无效

通过supportedInterfaceOrientations的单独控制是无法锁定屏幕的。

-(NSUInteger)supportedInterfaceOrientations

{

    returnUIInterfaceOrientationMaskPortrait;

}



总结出控制屏幕旋转支持方向的方法如下:

子类化UINavigationController,增加方法

- (BOOL)shouldAutorotate

{

    returnself.topViewController.shouldAutorotate;

}


- (NSUInteger)supportedInterfaceOrientations

{

    returnself.topViewController.supportedInterfaceOrientations;

}


并且设定其为程序入口,或指定为self.window.rootViewController

随后添加自己的view controller,如果想禁止某个view controller的旋屏:(支持全部版本的控制)



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    return (interfaceOrientation ==UIInterfaceOrientationPortrait);

}


-(BOOL)shouldAutorotate

{

    returnNO;

}


-(NSUInteger)supportedInterfaceOrientations

{

    returnUIInterfaceOrientationMaskPortrait;

}



如果想又开启某个view controller的全部方向旋屏支持:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    return (interfaceOrientation !=UIInterfaceOrientationPortraitUpsideDown);

}


-(NSUInteger)supportedInterfaceOrientations

{

    returnUIInterfaceOrientationMaskAllButUpsideDown;

}


-(BOOL)shouldAutorotate

{

    returnYES;

}



从而实现了对每个view controller的单独控制。

顺便提一下,如果整个应用所有view controller都不支持旋屏,那么干脆:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window

{

    returnUIInterfaceOrientationMaskPortrait;

}

原创粉丝点击