首页 > 代码库 > 屏幕旋转时,遇到的问题

屏幕旋转时,遇到的问题

1,ios6屏幕旋转,所有被push出来的controller的旋转属性都由root controller中以下函数
- (NSInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

- (BOOL)shouldAutorotate {
    return YES;
}
决定,被push出来的controller的旋转属性都被root controller限定好了。如果某个controller需要独立的旋转属性,需要以present的方式推出这个controller,因为以present的方式推出的controller会被当作是一个独立的root controller。如果尝试动态修改root controller的旋转属性,来满足被push出来的controller的个性话旋转要求,被证实部分有效(比如,root controller 可以旋转,要限定push出来的子controller只支持竖屏的方式,我们在弹出子controller前,将root controller的旋转属性设置为只支持竖屏,子controller被push出来后,确实只支持竖屏,但当root controller在横屏时push这个子controller时,子controller也是横屏显示的,旋转为竖屏后,不再支持转回横屏);

2,UINavgationController 与它的rootcontroller在横屏下的frame关系;
通过观察程序运行时的log,发现:
rootController.view的frame是
origin=(x=0, y=0) size=(width=480, height=300)
而rootController.navigationController.view的frame是
origin=(x=0, y=0) size=(width=320, height=480),仍然与竖屏的尺寸是一样的,这时,可以通过以下方法将frame转换:
CGRect tmpRect = CGRectApplyAffineTransform(self.navigationController.view.frame, self.navigationController.view.transform );
转换后的尺寸为:origin=(x=0, y=-320) size=(width=480, height=320)。宽和高都正常了,origin自行调整下就ok了。