美文网首页
单独某个界面横屏显示

单独某个界面横屏显示

作者: 123_4567_8910 | 来源:发表于2016-08-22 13:52 被阅读179次

    AppDelegate中代码

    - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
    {
        if (_allowRotation == 1) {       
               return UIInterfaceOrientationMaskAllButUpsideDown;    
         }else{        
               return (UIInterfaceOrientationMaskPortrait);    
         }
    }
    // 支持设备自动旋转
    - (BOOL)shouldAutorotate{
        if (_allowRotation == 1) {
            return YES;
        }
        return NO;
    }
    

    在想要旋转的ViewController中写入

        AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
        appDelegate.allowRotation = 1;
    

    在ViewController消失的时候设置

        AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
        appDelegate.allowRotation = 0;
    

    屏幕旋转监听方法

    在特别的场景下,需要针对屏幕旋转作特殊处理。在iOS系统下实现相关的功能还是比较方便的。

    1.注册UIApplicationDidChangeStatusBarOrientationNotification通知(举例:在一个viewcontroller类的viewdidload中注册该通知),示例代码如下

    注意这种方式监听的是StatusBar也就是状态栏的方向,所以这个是跟你的布局有关的,你的布局转了,才会接到这个通知,而不是设备旋转的通知。当我们关注的东西和布局相关而不是纯粹设备旋转,我们使用上面的代码作为实现方案比较适合。

     [[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(statusBarOrientationChange:) name:UIApplicationDidChangeStatusBarOrientationNotificationobject:nil];
    
    - (void)statusBarOrientationChange:(NSNotification *)notification
    
    {
    
    
        UIInterfaceOrientation orientation = [[UIApplicationsharedApplication] statusBarOrientation];
    
        if (orientation == UIInterfaceOrientationLandscapeRight) // home键靠右
    
        {
    
            //
    
        }
    
    
        if (
    
            orientation ==UIInterfaceOrientationLandscapeLeft) // home键靠左
    
        {
    
            //
    
        }
    
    
        if (orientation == UIInterfaceOrientationPortrait)
    
        {
    
            //
    
        }
    
        if (orientation == UIInterfaceOrientationPortraitUpsideDown)
    
        {
    
            //
    
        }
    
    }
    
    2.注册UIDeviceOrientationDidChangeNotification通知(举例:我们同样在一个viewcontroller类的viewdidload中注册该通知),示例代码如下:

    注意到这种方式里面的方向还包括朝上或者朝下,很容易看出这个完全是根据设备自身的物理方向得来的,当我们关注的只是物理朝向时,我们通常需要注册该通知 来解决问题(另外还有一个加速计的api,可以实现类似的功能,该api较底层,在上面两个方法能够解决问题的情况下建议不要用,使用不当性能损耗非常 大)。

      [[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(orientChange:) name:UIDeviceOrientationDidChangeNotificationobject:nil];
    
    - (void)orientChange:(NSNotification *)noti
    
    {
    
    
        NSDictionary* ntfDict = [noti userInfo];
    
    
        UIDeviceOrientation  orient = [UIDevicecurrentDevice].orientation;
    
        /*
    
         UIDeviceOrientationUnknown,
    
         UIDeviceOrientationPortrait,            // Device oriented vertically, home button on the bottom
    
         UIDeviceOrientationPortraitUpsideDown,  // Device oriented vertically, home button on the top
    
         UIDeviceOrientationLandscapeLeft,       // Device oriented horizontally, home button on the right
    
         UIDeviceOrientationLandscapeRight,      // Device oriented horizontally, home button on the left
    
         UIDeviceOrientationFaceUp,              // Device oriented flat, face up
    
         UIDeviceOrientationFaceDown             // Device oriented flat, face down   */
    
    
               switch (orient)
    
            {
    
                caseUIDeviceOrientationPortrait:
    
    
                    break;
    
                caseUIDeviceOrientationLandscapeLeft:
    
    
    
                    break;
    
                caseUIDeviceOrientationPortraitUpsideDown:
    
    
    
                    break;
    
                caseUIDeviceOrientationLandscapeRight:
    
    
    
                    break;
    
    
                default:
    
                    break;
    
            }
    
    }
    

    相关文章

      网友评论

          本文标题:单独某个界面横屏显示

          本文链接:https://www.haomeiwen.com/subject/udxgsttx.html