iOS实现手动和自动屏幕旋转

 更新时间:2022年07月20日 15:25:39   作者:z15083415803  
这篇文章主要为大家详细介绍了iOS实现手动和自动屏幕旋转,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了iOS实现手动和自动屏幕旋转的具体代码,供大家参考,具体内容如下

首先iPhone中屏幕分为状态栏方向和设备方向

typedef NS_ENUM(NSInteger, UIDeviceOrientation) {
    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
};

typedef NS_ENUM(NSInteger, UIInterfaceOrientation) {
    UIInterfaceOrientationUnknown            = UIDeviceOrientationUnknown,
    UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
    UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
    UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
    UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft
};

系统提供两个地方来设置设备的方向,取两个地方的交集是最后的设备所支持的方向

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window;
-(NSUInteger)supportedInterfaceOrientations;

这里需要注意的是返回的时下面的枚举

typedef NS_OPTIONS(NSUInteger, UIInterfaceOrientationMask) {
    UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait),
    UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft),
    UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight),
    UIInterfaceOrientationMaskPortraitUpsideDown = (1 << UIInterfaceOrientationPortraitUpsideDown),
    UIInterfaceOrientationMaskLandscape = (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight),
    UIInterfaceOrientationMaskAll = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown),
    UIInterfaceOrientationMaskAllButUpsideDown = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight),
};

在转动屏幕的时候会触发下面方法

-(BOOL)shouldAutorotate;

在该方法返回真,自动调用上面的两个方法得到方向。

修改状态栏方向的方法

1、使用私有API setOrientation;
2、修改状态栏的方向,并通过设置View的transform来达到伪旋转的结果,但是设备方向并没有改变
3、主动出发系统支持的方法,就相当于让这个vc在重新出来的时候系统判断所支持的方向的机制重新走一遍。

- (void)awakeSupportInterOrtation:(UIViewController *)showVC completion:(void(^)(void))block
{
    UIViewController *vc = [[UIViewController alloc] init];
    void(^completion)() = ^() {
        [showVC dismissViewControllerAnimated:NO completion:^{
            if (block)
            {
                block();
            }
        }];
    };

    // This check is needed if you need to support iOS version older than 7.0
    BOOL canUseTransitionCoordinator = [showVC respondsToSelector:@selector(transitionCoordinator)];

    if (canUseTransitionCoordinator)
    {
        [showVC presentViewController:vc animated:NO completion:nil];
        [showVC.transitionCoordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
            completion();
        }];
    }
    else
    {
        [showVC presentViewController:vc animated:NO completion:completion];
    }
}

-(NSUInteger)supportedInterfaceOrientations
{
        return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

在需要转为竖屏的时候调用一个方法,在后面两个方法中如上实现,第二个方法中返回的是你最终要转向的方向。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • iOS中你需要的弹窗效果总结大全

    iOS中你需要的弹窗效果总结大全

    弹窗是app中常见控件之一,一般由于项目需求,我们很少能直接使用系统提供的弹窗,这个时候就需要我们根据产品需求封装自定义弹窗了。下面这篇文章主要给大家介绍了关于iOS中你需要的弹窗效果的相关资料,需要的朋友可以参考下
    2018-09-09
  • IOS实现的简单画板功能

    IOS实现的简单画板功能

    本文主要介绍了IOS实现简单画板的示例代码。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • iOS将地址解析成经纬度的方法

    iOS将地址解析成经纬度的方法

    这篇文章主要为大家详细介绍了iOS将地址解析成经纬度的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • IOS 中NSUserDefaults读取和写入自定义对象的实现方法

    IOS 中NSUserDefaults读取和写入自定义对象的实现方法

    这篇文章主要介绍了IOS 中NSUserDefaults读取和写入自定义对象的实现方法的相关资料,希望通过本文大家能够理解掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • Objective-C学习之ARC的实现方法

    Objective-C学习之ARC的实现方法

    自动引用计数(Automatic Reference Counting, ARC)把压在程序员们肩头的管理内存的重担卸除了不少,更不用说让跟踪内存泄漏那样的烦心事也少了很多。下面这篇文章主要给大家介绍了关于Objective-C学习之ARC的实现方法,需要的朋友可以参考借鉴下。
    2017-12-12
  • IOS开发 UIAlertController详解及实例代码

    IOS开发 UIAlertController详解及实例代码

    这篇文章主要介绍了 IOS开发 UIAlertController详解及实例代码的相关资料,需要的朋友可以参考下
    2016-12-12
  • iOS 输入验证码或密码,自动下一位的实例

    iOS 输入验证码或密码,自动下一位的实例

    下面小编就为大家分享一篇iOS 输入验证码或密码,自动下一位的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • iOS自定义字体显示问题的完美解决方法

    iOS自定义字体显示问题的完美解决方法

    这篇文章主要给大家介绍了关于iOS自定义字体出问题的完美解决方法,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • 详解iOS中UIButton的三大UIEdgeInsets属性用法

    详解iOS中UIButton的三大UIEdgeInsets属性用法

    这篇文章主要介绍了iOS中UIButton的三大UIEdgeInsets属性用法,分别讲解了contentEdgeInsets、imageEdgeInsets和titleEdgeInsets三个属性在创建UIButton时对样式的控制,需要的朋友可以参考下
    2016-04-04
  • IOS多线程编程NSThread的使用方法

    IOS多线程编程NSThread的使用方法

    这篇文章主要介绍了IOS多线程编程NSThread的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解使用多线程的方法,需要的朋友可以参考下
    2017-10-10

最新评论