一直遇到这个问题,今天最终找到了解决方法.

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

  1. 强制转成横屏:
  2.  
  3. if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
  4. SEL selector = NSSelectorFromString(@"setOrientation:");
  5. NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
  6. [invocation setSelector:selector];
  7. [invocation setTarget:[UIDevice currentDevice]];
  8. int val = UIInterfaceOrientationLandscapeRight;
  9. [invocation setArgument:&val atIndex:2];
  10. [invocation invoke];
  11. }

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

  1. - (void)deviceOrientationDidChange: (NSNotification *)notification
  2. {
  3. UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
  4. CGFloat startRotation = [[self valueForKeyPath:@"layer.transform.rotation.z"] floatValue];
  5.  
  6. CGAffineTransform rotation;
  7. switch (interfaceOrientation) {
  8. case UIInterfaceOrientationLandscapeLeft:
  9. rotation = CGAffineTransformMakeRotation(-startRotation + M_PI * 270.0 / 180.0);
  10. break;
  11. case UIInterfaceOrientationLandscapeRight:
  12. rotation = CGAffineTransformMakeRotation(-startRotation + M_PI * 90.0 / 180.0);
  13. break;
  14. case UIInterfaceOrientationPortraitUpsideDown:
  15. rotation = CGAffineTransformMakeRotation(-startRotation + M_PI * 180.0 / 180.0);
  16. break;
  17. default:
  18. rotation = CGAffineTransformMakeRotation(-startRotation + 0.0);
  19. break;
  20. }
  21. view.transform = rotation;
  22. }

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

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

  1. -(BOOL)shouldAutorotate //是否支持旋转。假设为NO,则下边的方法就不会调用,假设为YES,才会调用
  2. {
  3. if (!shouldAutorot) {
  4. return NO;
  5. }else{
  6. return YES;
  7. }
  8. }
  9.  
  10. -(NSUInteger)supportedInterfaceOrientations
  11. {
  12. return UIInterfaceOrientationMaskAllButUpsideDown;
  13. }

小胖说事30------iOS 强制转成横屏的方式的更多相关文章

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

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

  2. 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )

    此文章参考<深入理解计算机系统>P31. 先看如下代码:  12345的十六进制表示为:0x00003039 #include <stdio.h> int main() { ; ...

  3. JAVA将数字字符串强制转换成整型变量----求参数之和实验代码(附流程图)

    一.设计思想 先将参数个数输出,并利用循环结果将参数逐个输出,再将字符串强制转化成整型,利用循环结构相加求和 二.程序流程图 三.源程序代码 package demo; public class Co ...

  4. 聊聊java基础,int值强制类型转换成byte

    聊聊java基础,int值强制类型转换成byte 知识点:byte.short.char在表达式中会自动提升为int 之前做一个应用时,打印IP地址,因为是用4个byte存储的,所以打印的时候值范围是 ...

  5. iOS强制横屏或强制竖屏

    原文链接 https://www.jianshu.com/p/d6cb54d2eaa1 亲测第二种我这边是阔以滴 第一种解决方案(不推荐,直接跳过看第二种解决方案): //强制转屏 - (void)i ...

  6. Number 强制类型转换 int 强制转换整型 float 强制转换浮点型 complex 强制转换成复数 bool 强制转换成布尔类型,结果只有两种,要么True 要么 False """bool 可以转换所有的数据类型 everything"""

    # ###Number 强制类型转换 var1 = 5 var2 = 4.85 var3 = True var3_2 = False var4 = 3+9j var5 = "888777&q ...

  7. java父类可以强制转化成子类吗?

    转自:http://blog.csdn.net/ld422586546/article/details/9707997 Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换 ...

  8. iOS强制横竖屏转换

    https://www.jianshu.com/p/d6cb54d2eaa1  这篇文章给出的方案是可行的. 经测试,想要第一个界面强制横屏,第二个界面强制竖屏, dismiss掉之后回到第一个界面依 ...

  9. C void的指针 强制类型转换(int*)p 把变量指针p强制转换成指向int类型的指针

    #include <stdio.h> int main(void){ void *p; int a = 14322; char c ='A'; p = &a; //p = & ...

随机推荐

  1. Java多线程演示样例(模拟通话,sleep,join,yield,wait,notify,Semaphore)

    主线程等待子线程的多种方法 synchronized浅析 sleep 是静态方法,Thread.sleep(xx)谁调用谁睡眠. join 是合并方法.当前线程调用其它线程xx.join()则等到xx ...

  2. Android 开源项目android-open-project解析之(二) GridView,ImageView,ProgressBar,TextView

    五.GridView StaggeredGridView 同意非对齐行的GridView,类似Pinterest的瀑布流.而且跟ListView一样自带View缓存,继承自ViewGroup 项目地址 ...

  3. MFC窗口去边框、置顶、全屏、激活

    静态移除长提边框非常easy,直接设置"Border"属性为"none"就可以 "Maximize Box", "Minimize ...

  4. hdu5592/BestCoder Round #65 树状数组寻找第K大

    ZYB's Premutation    Memory Limit: 131072/131072 K (Java/Others) 问题描述 ZYBZYB有一个排列PP,但他只记得PP中每个前缀区间的逆 ...

  5. 用shell脚本实现linux系统上wifi模式(STA和soft AP)的转换

    转载请注明出处:http://blog.csdn.net/hellomxj1/ 功能:在linux系统上实现wifi STA与AP功能的转换 实现成果:1.加入wifipassword账户add_wi ...

  6. windows 下载安装github

    参考链接:http://download.csdn.net/download/devsplash/9683971

  7. ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked

    ES出现异常: failed to notify ClusterStateListenerjava.lang.IllegalStateException: environment is not loc ...

  8. UESTC--1263--The Desire of Asuna(贪心)

    The Desire of Asuna Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu Su ...

  9. Activity、Fragment、ViewPage

    1.新建super //super提供统一的FragmentActivity入口.public abstract class SuperFragmentActivity extends Fragmen ...

  10. CSS实现栅格布局

    CSS实现栅格布局 设置容器container: .grid-container { width: 100%; max-width: 1200px; } 清除浮动: .row:before, .row ...