1. 唉,用了这种方式 出现了各种衍生问题。。。
self.view.transform = CGAffineTransformMakeRotation(-M_PI/2);
如果想要电池条跟随旋转可以设置[UIApplication sharedApplication] setStatusBarOrientation。不过该方法生效需要:- (UIInterfaceOrientationMask)supportedInterfaceOrientations返回值是0.
这种方式也可以结合UIDeviceOrientationDidChangeNotification来使用。即使(UIInterfaceOrientationMask)supportedInterfaceOrientations返回值设定为0 或者用户开启了 屏幕旋转锁定;仍然可以监听到UIDeviceOrientationDidChangeNotification。并通过[UIDevicecurrentDevice].orientation来判断当前屏幕朝向。
2.系统自动监测屏幕旋转
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAll;
}
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{//(UIInterfaceOrientationMask)supportedInterfaceOrientations返回值设定为0 或者用户开启了 屏幕旋转锁定都将不再响应该方法
[superwillAnimateRotationToInterfaceOrientation:toInterfaceOrientationduration:duration];
if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft||toInterfaceOrientation==UIInterfaceOrientationLandscapeRight) {
//做一些需要的操作
}
}3.
通过setOrientation:的办法强制性的旋转到一个特定的方向。
注意:Apple在3.0以后都不支持这个办法了,这个办法已经成为了私有的了,但是要跳过AppStroe的审核,需要一点巧妙的办法。
不要直接调用[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]这样的办法来强制性的横屏,这样导致你的程序是很难通过AppStore审核的。但是你可以选择使用performSelector的办法来调用它。具体就几行代码如下:
//强制横屏
if([[UIDevice currentDevice]respondsToSelector:@selector(setOrientation:)]) {
[[UIDevice currentDevice]performSelector:@selector(setOrientation:)//这种方式需要在MRC状态下才能正确执行
withObject:(id)UIInterfaceOrientationLandscapeRight];
}
ARC情况下用:
if ([[UIDevicecurrentDevice]respondsToSelector:@selector(setOrientation:)]) {
SEL selector =NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocationinvocationWithMethodSignature:[UIDeviceinstanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevicecurrentDevice]];
int val =UIInterfaceOrientationPortrait;
[invocation setArgument:&valatIndex:2];
[invocation invoke];
}
4.是不是可以用两个viewController。竖直方向的一个viewController(只支持纵向),横向的一个(只支持横向左或右)。
强制横屏参考 从ViewController初始化一直谈到强制横屏 http://blog.sina.com.cn/s/blog_76264a170101e5lb.html
PS:
UIDeviceOrientation 是机器硬件的当前旋转方向 这个你只能取值 不能设置
UIInterfaceOrientation 是你程序界面的当前旋转方向 这个可以设置 额。。。