第一种:通过人为的办法改变view.transform的属性。

具体办法:

view.transform一般是View的旋转,拉伸移动等属性,类似view.layer.transform,区别在于View.transform是二维的,也就是使用仿射的办法通常就是带有前缀CGAffineTransform的类(可以到API文档里面搜索这个前缀的所有类),而view.layer.transform可以在3D模式下面的变化,通常使用的都是前缀为CATransform3D的类。

这里要记住一点,当你改变过一个view.transform属性或者view.layer.transform的时候需要恢复默认状态的话,记得先把他们重置可以使用view.transform = CGAffineTransformIdentity,或者view.layer.transform = CATransform3DIdentity,假设你一直不断的改变一个view.transform的属性,而每次改变之前没有重置的话,你会发现后来的改变和你想要的发生变化了,不是你真正想要的结果。

好了,上面介绍了旋转的属性,接下来就是关键了。官方提供了一个办法就是查看当前电池条的状态UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;通过这个办法,你可以知道当前屏幕的电池条的显示方向,而且你还可以强制设置他的显示方向,通过设置这个属性就OK了,可以选择是否动画改变电池条方向。有了这两个那我们就可以任意的改变我们想要的显示方式了。

1.获取当前电池条的方向UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation

2.获取当前屏幕的大小CGRect frame = [UIScreen mainScreen].applicationFrame;

3.设置我们的View的中心点
    CGPoint center = CGPointMake(frame.origin.x + ceil(frame.size.width/2), frame.origin.y + ceil(frame.size.height/2));

4.根据当前电池条的方向,获取需要旋转的角度的大小。通常

if (orientation == UIInterfaceOrientationLandscapeLeft) {
        return CGAffineTransformMakeRotation(M_PI*1.5);
    } else if (orientation == UIInterfaceOrientationLandscapeRight) {
        return CGAffineTransformMakeRotation(M_PI/2);
    } else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
        return CGAffineTransformMakeRotation(-M_PI);
    } else {
        return CGAffineTransformIdentity;
    }

5.可以动画的改变我们view的显示方式了
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeRight animated:YES];

CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;(获取当前电池条动画改变的时间)
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:duration];

//在这里设置view.transform需要匹配的旋转角度的大小就可以了。

[UIView commitAnimations];

第二种:通过setOrientation:的办法强制性的旋转到一个特定的方向。

注意:Apple在3.0以后都不支持这个办法了,这个办法已经成为了私有的了,但是要跳过App Stroe的审核,需要一点巧妙的办法。

不要直接调用[[UIDevice currentDevice] setOrientation: UIInterfaceOrientationLandscapeRight]这样的办法来强制性的横屏,这样导致你的程序是很难通过App Store审核的。但是你可以选择使用performSelector的办法来调用它。具体就几行代码如下:

//强制横屏
    if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
        [[UIDevice currentDevice] performSelector:@selector(setOrientation:)
                                       withObject:(id)UIInterfaceOrientationLandscapeRight];
    }

总结:如果第一种办法可以满足你需要的话,最好使用第一种办法,因为那个上 App Store肯定没问问题,但是第二种的话是需要冒风险的,但是如果你的结构太复杂了,导致使用第一种办法人为很难控制的话,可以尝试简单的使用第二种办法。我在有米提供的sample里面就看到他使用了第二种简单的办法来显示横屏竖式的广告条。

附件下载 sample.zip (51 K)

强制横屏或竖屏解决方案相关推荐

  1. 【Android】如何设置应用强制横屏或竖屏

    作者:Yogi 前言:有时候我们想让应用保持在一个状态:横屏或者竖屏.那么应该怎么做呢? #方法1 setRequestedOrientation(ActivityInfo.SCREEN_ORIENT ...

  2. 设置安卓app页面强制横屏或者竖屏,不随手机姿势变化

    在AndroidMainfest.XML中, 加入到activity在mainfest的注册信息中 android:screenOrientation="portrait" //强 ...

  3. Android 强制横屏或竖屏设置

    强制竖屏横屏 //横屏设置 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //竖屏设置 setRequeste ...

  4. iOS强制切换横屏、竖屏

    切换横竖屏最直接的方式是调用device的setOrientation方法.但是从sdk3.0以后,这个方法转为似有API,如果要上AppStore的话,要慎用! if ([[UIDevice cur ...

  5. Android 强制设置横屏或竖屏 设置全屏

    Android 强制设置横屏或竖屏 设置全屏 全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeatur ...

  6. android 强制设置横屏 判断是横屏还是竖屏

    判断activity 是横屏还是竖屏  方法 1: //根据设备配置信息 Configuration cf= this.getResources().getConfiguration(); //获取设 ...

  7. Symbian S60 5th 切换程序UI方向为横屏或竖屏

    缺省情况下,程序是根据手机屏幕的当前方向开始启动的.如果要强制程序以横屏或竖屏的模式启动,那我们在CAknAppUi::ConstructL()方法中调用BaseConstructL()时就要传递相应 ...

  8. 电脑快捷键横屏变竖屏,电脑显示器竖屏横屏来回切换怎么设置

    对于横屏与竖屏来回切换,很多小伙伴使用可能很不习惯,那如何在横屏与竖屏之间来回快速切换呢?下面是小编为大家介绍电脑显示器竖屏横屏来回切换的设置方法,欢迎大家阅读. 电脑显示器竖屏横屏来回切换的设置方法 ...

  9. 短视频生产利器!视频裁剪之横屏转竖屏新技术,出自腾讯多媒体实验室

    腾讯多媒体技术专栏 伴随手机等智能设备的广泛使用以及短视频平台的兴起,越来越多的"竖屏"视频开始占据人们的视野.目前,许多"竖屏"视频仍是由16:9等宽高比的& ...

最新文章

  1. mysql配置文件没有spring_spring cloud config使用mysql存储配置文件
  2. windows中以管理员身份运行cmd
  3. 比较字符串a和b的大小
  4. ViewPager+Fragment,Fragment会预加载的问题
  5. Python练习:目录与文件操作
  6. 富士康有麻烦了,iPhone产能已被削减
  7. python风险评分卡系统_《智能风控:Python金融风险管理与评分卡建模》(梅子行,毛鑫宇)【摘要 书评 试读】- 京东图书...
  8. 史上最全的Maven Pom文件标签详解
  9. Flash与后台数据交互方法总结
  10. 再回首Java第二十二天
  11. python异步调用exe等待_【Python】Async异步等待简单例子理解
  12. Java面试官在面试时喜欢问哪些问题?
  13. 民营企业该如何留住人才
  14. excel中用正则匹配_Excel 使用正则表达式提取数据
  15. android 连接web加密的wifi,Android 与WEP加密连接
  16. arch模型的思路_ARCH模型课件.ppt
  17. DFSGSDGHSDGSEDFG
  18. Steinhaus-Johnson-Trotter 生成全排列算法
  19. IE8 设置图片大小,没有效果
  20. Android8.1 audio之compressed offload流程(四十一)

热门文章

  1. 我的数据可视化之旅:从天文学家到数据可视化专家养成记
  2. 读《长安的荔枝》有感
  3. 游戏服务器生成全局唯一ID的几种方法
  4. 万能数据库查询分析器使用技巧之(九)
  5. 正规的棋牌游戏开发公司需要具备哪些条件
  6. cf Educational Codeforces Round 134 E. Prefix Function Queries
  7. counters.dat_使用sys.dm_os_performance_counters对SQL Server问题进行故障排除
  8. mysql查询出现毫秒值快速解决方法
  9. pacemaker+corosync 搭建一主两从PG集群
  10. linux运维cadn,Aprende an elaborar un amasamiento tГЎntrico citaciГіn