ios横竖屏

ios横竖屏的效果是不相同的,所以我们在开发中如果允许屏幕横竖屏间的切换,那么我们就要调整视图的布局。利用Interface Builder开发,我们可以快速的拖拽出合适的界面布局,但是屏幕自动切换布局不能很好的适配,下图是,没有做任何调整的状态下,实现的横竖屏切换,可以看到界面不是很美观。

  

  目前我所知的实现ios横竖屏切换的解决方案共有三种:

  1.利用Interface Builder适配器自动适配调整界面。

  2.在横竖屏切换时,每个控件重新布局。

  3.利用Interface Builder创建两个视图,横屏时切换到横屏视图,竖屏时切换到竖屏视图。

  在ios中,横竖屏切换时,会调用下面函数

  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
          if (interfaceOrientation==UIInterfaceOrientationLandscapeLeft) { 
              //zuo
          } 
          if (interfaceOrientation==UIInterfaceOrientationLandscapeRight) { 
              //you
          } 
          if (interfaceOrientation==UIInterfaceOrientationPortrait) { 
              //shang
          } 
          if (interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) { 
              //xia
          } 
          return YES; 
      }

  返回yes表示切换屏幕,返回no是不能向相应的方向切换视图。

  下面分别介绍一下三种方法,第一种方法最简单,但是效果是最差的,我们只需用Interface bulider修改相应的属性即可。实现的效果如下:
  

  实现的方法:

  

  选中控件,按command+3,上图红框部分的红线表示距离不能自动适配,要是虚线表示距离可以自动适配。我们选择可以自动适配,最后的结果就如上图。

  第二种方法:

  第二种方法是相应的控件和代码相关联:

  代码:

  @interface ipad_demooViewController : UIViewController { 
         IBOutlet UIButton *myButton1; 
          IBOutlet UIButton *myButton2; 
          IBOutlet UIButton *myButton3; 
          IBOutlet UIButton *myButton4; 
          IBOutlet UIButton *myButton5; 
          IBOutlet UIButton *myButton6; 
      } 
      @property (nonatomic,retain) UIButton *myButton1; 
      @property (nonatomic,retain) UIButton *myButton2; 
      @property (nonatomic,retain) UIButton *myButton3; 
      @property (nonatomic,retain) UIButton *myButton4; 
      @property (nonatomic,retain) UIButton *myButton5; 
      @property (nonatomic,retain) UIButton *myButton6; 
      @end

  和IB相关联:

  更改每一个控件的布局:

  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
         if (interfaceOrientation==UIInterfaceOrientationLandscapeLeft) { 
             //zuo
             self.myButton1.frame=CGRectMake(86, 208, 72, 37); 
             self.myButton2.frame=CGRectMake(480, 208, 72, 37); 
             self.myButton3.frame=CGRectMake(86, 308, 72, 37); 
             self.myButton4.frame=CGRectMake(480, 308, 72, 37); 
             self.myButton5.frame=CGRectMake(86, 408, 72, 37); 
             self.myButton6.frame=CGRectMake(480, 408, 72, 37); 
         } 
         if (interfaceOrientation==UIInterfaceOrientationLandscapeRight) { 
             //you
             self.myButton1.frame=CGRectMake(86, 208, 72, 37); 
             self.myButton2.frame=CGRectMake(480, 208, 72, 37); 
             self.myButton3.frame=CGRectMake(86, 308, 72, 37); 
             self.myButton4.frame=CGRectMake(480, 308, 72, 37); 
             self.myButton5.frame=CGRectMake(86, 408, 72, 37); 
             self.myButton6.frame=CGRectMake(480, 408, 72, 37); 
         } 
         if (interfaceOrientation==UIInterfaceOrientationPortrait) { 
             //shang
             self.myButton1.frame=CGRectMake(86, 208, 72, 37); 
             self.myButton2.frame=CGRectMake(480, 208, 72, 37); 
             self.myButton3.frame=CGRectMake(86, 308, 72, 37); 
             self.myButton4.frame=CGRectMake(480, 308, 72, 37); 
             self.myButton5.frame=CGRectMake(86, 408, 72, 37); 
             self.myButton6.frame=CGRectMake(480, 408, 72, 37); 
         } 
         if (interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) { 
             //xia
             self.myButton1.frame=CGRectMake(86, 208, 72, 37); 
             self.myButton2.frame=CGRectMake(480, 208, 72, 37); 
             self.myButton3.frame=CGRectMake(86, 308, 72, 37); 
             self.myButton4.frame=CGRectMake(480, 308, 72, 37); 
             self.myButton5.frame=CGRectMake(86, 408, 72, 37); 
             self.myButton6.frame=CGRectMake(480, 408, 72, 37); 
         } 
         return YES; 
     }

  第三种方法是创建两个视图,下面看一下实现过程:

  首先创建两个视图:

  IBOutlet UIView *hView; 
  IBOutlet UIView *vView;

  创建相应的@property方法.

  然后在IB中在复制一个view。

  

  把一个视图做横屏时的布局,一个view做竖屏时的布局。把相应的view和相应的方法相连接,在设置一个默认视图为view。

  下面就是代码实现:

  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
          if (interfaceOrientation==UIInterfaceOrientationLandscapeLeft) { 
              //zuo
              self.view=self.hView; 
             } 
          if (interfaceOrientation==UIInterfaceOrientationLandscapeRight) { 
              //you
              self.view=self.hView; 
            } 
          if (interfaceOrientation==UIInterfaceOrientationPortrait) { 
              //shang
              self.view=self.vView; 
             } 
          if (interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) { 
              //xia
              self.view=self.vView; 
            } 
          return YES; 
      }

  实现的效果如下:

  

  上述就是我目前知道的三种横竖屏解决方案,我们可以看到第三种比较简单,但是编写比较麻烦,实现复杂逻辑比较麻烦,第二种方法实现起来不直观,调试比较麻烦,但是效果最好。

  源代码:

ios6.0横竖屏切换问题解决

  this class is not key value coding-compliant for the key

  ios5里面的旋转方法ios6里面确实掉不到了,但是还是可以用的。

  首先,在app的主界面(也就是自己的主ViewController.m)里面加上

  -(NSUInteger)supportedInterfaceOrientations{ 
      return UIInterfaceOrientationMaskAllButUpsideDown;//这里返回哪个值,就看你想支持那几个方向了。这里必须和后面plist文件里面的一致(我感觉是这样的)。
  } 
  - (BOOL)shouldAutorotate { 
      return YES;//支持转屏
  }

  这两个函数

  然后在plist文件里面找到Supported interface orientations (iPad)选项,添加你想支持的方向,都有提示的。

  然后问题就解决了。

  也许我描述的还有问题,希望你能指正。谢谢了。

  -(NSUInteger)supportedInterfaceOrientations{ 
      return UIInterfaceOrientationMaskAllButUpsideDown;//这里返回哪个值,就看你想支持那几个方向了。这里必须和后面plist文件里面的一致(我感觉是这样的)。
  }

  这里的设置会覆盖掉plist中的值

  还有需要注意:mainViewController要设置为window的rootViewController,addSubView上去可能存在问题。并且上面的所有subViewController都会受到rootViewController支持朝向的影响

时间: 2024-12-28 14:37:08

ios横竖屏的相关文章

iOS 横竖屏切换(应对特殊需求)

iOS 中横竖屏切换的功能,在开发iOS app中总能遇到.以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结.注意 横屏两种情况是反的你知道吗? UIInterfaceOrientationLandscapeRight与UIInterfaceOrientationMaskLandscapeRight都代表横屏,Home键在右侧的情况:UIDeviceOrientationLandscapeLeft则是Home键在左侧. 一般情形 所有界面都支持横

iOS横竖屏的一些坑(持续更新)

最近在做视频类的App,遇到视频滚动播放的坑,紧接着就是横竖屏问题.之前太过天真不想做横竖屏配置.只是淡出的旋转视频View,但是分享什么的包括AlertView还是竖屏样式,项目着急上线(1周提交一次也是够了...人家审核都烦了估计)也就一直没改.昨天开始改才发现是一个深坑! 因为首页是滚动播放,不想做横屏适配,看了下目前主流App,搜狐做的貌似是最好的.具体想过如图 他们横屏转动的时候后面的tableView不动的,当初就是看了一眼就天真的以为只是转动个view,其实还是竖屏...但是 紧接

ios 横竖屏通知

屏幕切换时,会发送一个通知.只要注册一个通知: [java] view plaincopy [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doRotateAction:) name:UIDeviceOrientationDidChangeNotification object:nil]; 然后在方法里做操作: [java] view plaincopy -(void) doRotateActio

关于设置iOS横竖屏的两种方式(转载)

iPhone的横屏竖屏针对iOS系统版本分为两种开发方式: 一种是iOS 6之前的使用模式 一种是iOS6的新模式. 两者的区别还是蛮大的. 1:iOS6之前通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个viewController支持旋转,只需要重写shouldAutorotateToInterfaceOrientation方法.如下示例,设置以后,屏幕被旋转时只支持横屏转换: - (BOO

ios 横竖屏切换总结

UIViewController强制竖屏: 如果想整个APP竖屏,可以写一个BaseViewcontroller 1 先在AppDelegate.m里面重写如下方法 - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { //返回你要支持的屏幕方向,如果只支持竖屏,直接返回竖屏的宏 } 2

iOS横竖屏设置

1.如果你的整个应用程序设置的是竖屏,如下: 如果你要应用的某个界面变为横屏,侧需要在该界面控制器中添加如下代码(前提是界面是present进去的,不是push进去的,消失要用dismiss) 1 - (BOOL)shouldAutorotate{ 2 return NO; 3 } 4 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ 5 return UIInterfaceOrientationLan

[iOS]终极横竖屏切换解决方案1

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Helvetica Neue"; background-color: #ffffff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #8c8c8c; background-color: #ffffff } p.p3 { margin: 0.0px

[iOS]终极横竖屏切换解决方案

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Helvetica Neue"; background-color: #ffffff } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #8c8c8c; background-color: #ffffff } p.p3 { margin: 0.0px

Android和IOS的简单嗅探,以及横竖屏的捕获思路

一般通过navigator.userAgent来嗅探Android系统和IOS系统: if(/android/i.test(navigator.userAgent)){ //android } if(/iphone/ipad/mac/i.test(navigator.userAgent)){ //ios } Android和IOS在横竖屏感测上的差异: Android: 90度  -90度为竖屏,0度  180度为横屏. IOS: 0度  180度为竖屏,90度  -90度为横屏. 移动端的浏览