首页 > 学院 > 开发设计 > 正文

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

2019-11-14 19:34:33
字体:
来源:转载
供稿:网友

  最近在做视频类的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);

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表