前提:项目必须勾选可以支持横竖屏。
实现方法:
1.使用陀螺仪判断设备的方向:
Z的绝对值是1的时候是水平地面的,是0的时候是垂直地面的。0.5是设置的误差,解决桌面有一点倾斜的时候,手机放置在桌面上会不停地旋转。
2.重写屏幕旋转相关的方法:
- (BOOL)shouldAutorotate;
设置是否支持旋转的,只有返回YES,才会调用下面的两个方法。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
旋转前调用的方法,toInterfaceOrientation是即将要旋转的方向,可以在该方法内更新UI布局。
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
旋转后调用的方法,fromInterfaceOrientation是原先的方向,也可以在该方法内更新UI布局,但更推荐用上一个方法。
使用[[UIDevice currentDevice] setValue:value forKey:@"orientation"];手动设置方向之后,系统会自动调用shouldAutorotate;
3.注意:
如果项目中存在只支持竖屏或者横屏的页面,该页面与可支持横竖屏的页面交互的时候会出现某些问题。譬如A页面只支持竖屏,B页面可支持横竖屏。A跳转到B,B页面旋转横屏然后返回A,此时,A是横屏的。为了解决这个问题,需要在A页面的viewDidAppear:方法强制设置屏幕方向。
NSNumber*value = [NSNumbernumberWithInt:UIInterfaceOrientationPortrait];
[[UIDevicecurrentDevice]setValue:valueforKey:@"orientation"];
网友评论