关于旋转屏幕的一些总结

来源:互联网 发布:linux中如何测试网速 编辑:程序博客网 时间:2024/05/22 14:49
    最近在做公司客户端国际化,由于是将应用里抽出来的一个模块,因此在做国际化时候遇到了一些问题,其中屏幕旋转就头疼了两天,还好完成了任务,在此记下一点心得,大家互相分享才有提高。
    
   屏幕旋转在ios6.0之前都是由这个方法来控制的-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation,所带参数是个枚举类型,有
    typedefNS_ENUM(NSInteger, UIInterfaceOrientation) {
   左边这部分是应用程序的旋转,可以赋值控制,等号右边这部分是设备旋转,只可读,不能赋值控制
   UIInterfaceOrientationPortrait          = UIDeviceOrientationPortrait,//Home键在最下方
   UIInterfaceOrientationPortraitUpsideDown =UIDeviceOrientationPortraitUpsideDown,//Home键在最上方,颠倒过来
   UIInterfaceOrientationLandscapeLeft//状态栏向左 =UIDeviceOrientationLandscapeRight,//Home键在最左方
   UIInterfaceOrientationLandscapeRight    = UIDeviceOrientationLandscapeLeft//Home键在最右方
};

   ios6.0,苹果提高了两个新的API,上面这个方法摒弃了,由
// New Autorotation support.
- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0);
- (NSUInteger)supportedInterfaceOrientationsNS_AVAILABLE_IOS(6_0);
来控制旋转,并且需要在info.plist文件里面进行设置需要控制的方向。
   它不在像以前那样在每个控制器里面进行设置,控制旋转,而是在根视图里进行控制,一般情况,根视图包括导航控制器或者是分栏控制器,所以这里得分两种情况了,如果没有nav或者tab管理作为根视图,那么就在当前控制器里进行管理,如果有nav或者tab作为根控制器,那么就得注意了。
   如果根视图是nav导航控制器的话,那么一般需要新建一个UINavgationCtorller子类或者给导航控制器添加一个类目,在里面实现以上两个方法。但是有种情况啊,如果在你导航控制器里面,随着压栈深入,可能里面的视图控制器有的需要改变屏幕旋转方向的,这样的话你就得在每个控制器里进行单独控制了,你可以重写以上两个方法分别进行控制,在类目或者nav的子控制器你可以这样做
   -(BOOL)shouldAutorotate
  
       //    return[[self.viewControllers lastObject] shouldAutorotate];
    returnself.topViewController.shouldAutorotate;
}

-(NSUInteger)supportedInterfaceOrientations
{
       //return [[self.viewControllers lastObject]supportedInterfaceOrientations];
       //    returnself.topViewController.supportedInterfaceOrientations;
    if([[selftopViewController] isKindOfClass:[QFSignC class]])
       return UIInterfaceOrientationMaskLandscapeRight;
    else
       return UIInterfaceOrientationMaskPortrait;

}调用self.topViewCtorller,得到当前的视图控制器,然后在视图控制器里分别重写以上两个方法进行设置。
0 0
原创粉丝点击