您的位置:首页 > 移动开发 > IOS开发

小胖说事30------iOS 强制转成横屏的方式

2017-06-07 10:44 225 查看
一直遇到这个问题,今天最终找到了解决方法.

在我们的项目中常常遇到横竖屏切换,而又有某个特定的界面必须是特定的显示方式(横屏或竖屏).这就须要例如以下的处理了.

强制转成横屏:

if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
int val = UIInterfaceOrientationLandscapeRight;
[invocation setArgument:&val atIndex:2];
[invocation invoke];
}


方法二: 通过推断状态栏来设置视图的transform属性。

- (void)deviceOrientationDidChange: (NSNotification *)notification
{
UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
CGFloat startRotation = [[self valueForKeyPath:@"layer.transform.rotation.z"] floatValue];

CGAffineTransform rotation;
switch (interfaceOrientation) {
case UIInterfaceOrientationLandscapeLeft:
rotation = CGAffineTransformMakeRotation(-startRotation + M_PI * 270.0 / 180.0);
break;
case UIInterfaceOrientationLandscapeRight:
rotation = CGAffineTransformMakeRotation(-startRotation + M_PI * 90.0 / 180.0);
break;
case UIInterfaceOrientationPortraitUpsideDown:
rotation = CGAffineTransformMakeRotation(-startRotation + M_PI * 180.0 / 180.0);
break;
default:
rotation = CGAffineTransformMakeRotation(-startRotation + 0.0);
break;
}
view.transform = rotation;
}


说明一下:假设实现了下边的两个方法。你的应用程序在初始化的时候有多少个controller就会走多少次下边两个方法。showldAutorotate这种方法是再你即将旋转屏幕的时候,就会再次调用,仅仅要在这里推断好YES或者NO就好了。

在你须要的时候通过shouldAutorot这个变量打开,不须要的时候关闭就能够了。有什么不明确的,能够增加上边的QQ群。里边问我。

-(BOOL)shouldAutorotate    //是否支持旋转。假设为NO,则下边的方法就不会调用,假设为YES,才会调用
{
if (!shouldAutorot) {
return NO;
}else{
return YES;
}
}

-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: