IOS开发 - 关于某一个View的强制横屏

时间:2024-04-05 11:10:02

因为屏幕旋转感觉比较麻烦,所以,极少做旋转的情况。这次,尝试做做旋转,总体感觉还行,比单一横屏要多一些事情要处理,但是,写代码的过程中发现:横屏与竖屏并不一定要完全保持所有的元素一样,比如,有些元素并不完全适合竖屏,或者说会带来很大的工作量,就可以简化。本着横屏与竖屏分别处理的原则,就好办多了。毕竟,对于用户来说,可以任意旋转,喜欢哪个旋一下就行,特殊情况必须使用时,那就忍一下小小的区别,应该不是什么大问题。

可是,遇到一个新问题,某一View只能使用横屏,竖屏很难做,或者要调整的东西太多太烦,找找强制横屏的办法。搜了一下,有些好像不起作用,该转的时候转,不该转的时候也转。找到一个基本能用的,基本代码如下:

 

- (void)interfaceOrientation:(UIInterfaceOrientation)orientation {

    //

    if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {

        //

        SEL selector             = NSSelectorFromString(@"setOrientation:");

        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];

        [invocation setSelector:selector];

        [invocation setTarget:[UIDevice currentDevice]];

        NSInteger val                  = orientation;

        // 从2开始是因为0 1 两个参数已经被selector和target占用

        [invocation setArgument:&val atIndex:2];

        [invocation invoke];

    }

}

 

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {

    //

    return UIInterfaceOrientationMaskLandscapeRight;

}

 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

    //

    return UIInterfaceOrientationLandscapeRight;

}

 

- (BOOL)shouldAutorotate {

    return NO;

}

 

- (void)viewWillAppear:(BOOL)animated {

    //

    [self interfaceOrientation:UIInterfaceOrientationLandscapeRight];

}

 

上述代码基本可以保持横屏状态,可是左右不分,最近一直在旋转,这样死死的保持一个方向,有点不喜欢,起码左右横屏应该能够适应,所以,不太想用,几次尝试改进,没有找到有效的方法。

 

突然,想到了404,也是不错的想法,为了避免旋转到竖屏出现的混乱尴尬的界面,加盖一个404的View,用户看到这个404,想必会自己再旋转回去吧!

反正就是不让用户在这个View旋转到竖屏,盖住也行吧,效果图如下。自己感觉比死死的保持一个方向要舒服,当然,苹果审核不知道能不能通过,试试,不行再改回来。

IOS开发 - 关于某一个View的强制横屏