·您现在的位置: 江北区云翼计算机软件开发服务部 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> iOS横竖屏切换的一些坑(持续更新)

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

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

  最近在做视频类的App,遇到视频滚动播放的坑,紧接着就是横竖屏问题。之前太过天真不想做横竖屏配置。只是想旋转视频View,但是分享什么的包括AlertView还是竖屏样式,项目着急上线(1周提交一次也是够了。。。人家审核都烦了估计)也就一直没改。昨天开始改才发现是一个深坑!

  因为首页是滚动播放,不想做横屏适配,坐标判断什么的还要改来改去,看了下目前主流App,搜狐做的貌似是最好的。具体效果如图

(傻傻的我截图结了半天才截到,我竟然不知道相机有一个功能叫做慢动作)

  他们横屏转动的时候后面的tableView不动的,当初就是看了一眼就天真的以为只是转动个view,其实还是竖屏。。。但是

  紧接着就是网络判断啥的,忽然才发现我根本就拉不出来这个面板啊 = =!只能竖着拉有木有

拉出来之后直接竖屏了有木有!!!

所以想到了他们应该是改变界面方向。然后就想,后面tableview不动,那我就手动改界面方向然后转视频View呗。

在ios8以前,手动调用

UIapplication *application=[UIApplication sharedApplication];
[application setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];

 

应该可以选择界面方向,关于界面方向和设备方向,详见一片枫叶大神的《屏幕旋转笔记》

但是在我的代码中调用之后没反应,后来查找资料发现在我的基类Viewcontroller里

- (BOOL)shouldAutorotate
{
   return YES;
}

 好吧,在显示视频窗那里返回NO

- (BOOL)shouldAutorotate
{
    return NO;
}

 发现statusbar转过去了,视图什么的都没动,这时间上拉下拉面板什么的也都对了,弹出的Alertview 方向也正确

就连键盘方向都对。好啦,问题貌似解决了。我视频全屏的时候至于要设置statusbar的方向,然后自己转下视频窗体就OK了。

然后我就开开心心睡觉去了。

   第二天。。按着这个思路改了下,发现没什么问题,分享啥的方向也对,只需要控制视图大小和旋转就好了。似乎到这里也就结束了,其实很简单嘛。。。

   但是,忽然间想到iOS8出来以后貌似UIScreen的bounds会跟着界面方向转动,bounds改变了会不会又影响,立马用模拟器跑了一遍,果然有问题

   宽高貌似反了,iOS8果然有坑!幸好记得有这么个情况,详见为毛iOS8下UIScreen的bonuns改变了

原来在iOS8下面

UIScreen is now interface oriented:

  • [UIScreen bounds] now interface-oriented
  • [UIScreen applicationFrame] now interface-oriented
  • Status bar frame notifications are interface-oriented
  • Keyboard frame notifications are interface-oriented         

  哪我判断下就好了,于是

CGFloat max = MAX(SCREEN_HEIGHT, SCREEN_WIDTH);
CGFloat min = MIN(SCREEN_HEIGHT, SCREEN_WIDTH);
 _player.view.frame = CGRectMake(0, 0, min, max);

 再次运行,好了,全屏可以了。恩,好像所有坑都填完了,表现不错,今天中午给自己加个鸡腿🍗 = =!。

 然后再细想,模拟器有时间也不靠谱,把土豪的肾6 Plus拿过来测一下(因为公司就我是ios7 ,不敢升级啊,升级了没测试机了)

 在肾6+下面似乎也正常,但是........当我点击右上角的分享按钮的时候,为毛点不动

 难道把土豪的肾弄挂了???又试了5、5s、6结果全都一样。但是在我手机上是正常的!又是iOS8的问题

有完没完啊喂!何苦为难我一个小白!

  肯定是UIScreen的问题!于是乎开始找,然后发现了这个、这个、还有这个

  好吧,果然是之前的一个大坑,义无反顾的就跳进去了!大概意思就是ios7下无问题,ios8 UIScreen的bounds改变了,所有你点击不到下半个屏幕了!

  试了半天,貌似无解,但是搜狐在iOS8下咋做的呢,然后在iOS8下下个搜狐,全屏。。。卧槽!和ios7一样啊,点击区域也没问题啊!!

  看了半天,查了半天不是说在iOS8下只能

 [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIDeviceOrientationPortrait] forKey:@"orientation"];

  这么搞嘛,并且这样搞转过来statusbar莫名消失了。大搜狐就这么牛X?

  不甘心又看了下优酷,好吧,优酷一看就是强制全屏,后面的窗体也跟着转了,连黑都没黑掉,还能看到转动动画,你总是学习大企鹅,人家好赖还做个黑屏动画。

  好吧,先写到这里,明天继续填坑,1个人独立做一个项目果然坑啊,一个问题卡着后面全都没办法进行了!

 

  补充一下,刚刚想到搜狐估计还在支持iOS6,所有会不会用的是Xcode5和iOS7的SDK,这样的话,理论上应该就没问题了,在iOS8下依旧和iOS7一样的。但是我本机的Xcode5被我删了(论2个Xcode共存的必要性)然后这破网速根本就下不动安装包,并且现在发布商店Xcode5不知道还能用不,等到下载下来在做补充吧

 

 

2月5日补充:

  历尽千辛万苦终于把Xcode5.1.1下载了,然后解决了N个报错和冲突,亲测使用iOS7的SDK编译在iOS8上面无问题,半个屏幕不能点击的问题也解决了,如果Xcode5.1.1能发包,按理来说应该可以了。但是在iOS7下面全屏时候下方会出现1像素的误差,能看到后面视图,在之前在iOS7上面出现过,使用iOS8SDK 无问题,初步判断是iOS7的Bug!!!!

以为播放器用的三方,并且是用最古老的Authosizing ,估计是xib的问题,真心无力啊。。。