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

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

iOS横竖屏切换的一些坑(持续更新)的更多相关文章

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

    iOS 中横竖屏切换的功能,在开发iOS app中总能遇到.以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结.注意 横屏两种情况是反的你知道吗? UI ...

  2. iOS 横竖屏切换解决方案

    iOS要实现横竖屏切换很简单,不需要使用任何第三方,只需要实现几个方法就可以了. 1.设置系统支持横竖屏[General]->[Targets]-> [Deployment info]-& ...

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

    [iOS]终极横竖屏切换解决方案 大家的项目都是只支持竖屏的吧?大多数朋友(这其中当然也包括博主),都没有做过横屏开发,这次项目刚好有这个需求,因此把横竖屏相关的心得写成一遍文章供诸位参考. 01.综 ...

  4. iOS 中各种横竖屏切换总结

    iOS 中横竖屏切换的功能,在开发iOS app中总能遇到.以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结.注意 横屏两种情况是反的你知道吗? UI ...

  5. 【IOS界面布局】横竖屏切换和控件自适应(推荐)

    [IOS界面布局]横竖屏切换和控件自适应(推荐) 分类: [MAC/IOS下开发]2013-11-06 15:14 8798人阅读 评论(0) 收藏 举报 横竖屏切换 自适应 第一种:通过人为的办法改 ...

  6. iOS开发之判断横竖屏切换

    /** *  当屏幕即将旋转的时候调用 * *  @param toInterfaceOrientation 旋转完毕后的最终方向 *  @param duration  旋转动画所花费的时间 */ ...

  7. Android APP 简单高效的禁用横竖屏切换

    默认情况下,Android APP的界面会随着手机方向的改变而改变,当手机处于竖屏状态,APP的界面也处于竖屏状态,而当手机处于横屏状态,APP也会自动切换到横屏状态.一般情况下APP的界面都是为竖屏 ...

  8. Android开发之Activity横竖屏切换生命周期重建问题

    当进行横竖屏切换的时候Activity的生命周期会重建,从而导致Activity崩溃等问题,为了避免这一问题,需要在AndroidManifest.xml文件中设置: <activity and ...

  9. Activity 横竖屏切换

    前言 在开发中常要处理横竖屏切换,怎么处理先看生命周期 申明 Activity 横竖屏切换时需要回调两个函数 ,所以在此将这个两个函数暂时看成是Activity 横竖屏切换的生命周期的一部分,这两个函 ...

随机推荐

  1. javascript widget ui mvc

    MVC只是javascript的一个UI模式 JavaScript UI----UI, Template, MVC(View)----Backbone, Angular RequireJS------ ...

  2. 【HDOJ】2222 Keywords Search

    AC自动机基础题. #include <iostream> #include <cstdio> #include <cstring> #include <cs ...

  3. 在线LCA模板

    在线LCA 如求A,B两点的LCA,先计算出各个结点的深度d[],然后,通过递推公式求出各个结点的2次方倍的祖先p[],假设d[A] > d[B],则找到d[p[A][i]] == d[B]也就 ...

  4. ARM机器码分析

    我们编写的汇编程序还是不够底层,CPU都是对机器码进行操作的,所以还需要用汇编器将汇编代码转换成机器码才能被CPU处理.下面举几个例子来说说分析ARM机器码的方法. 对编译连接之后得到的ELF进行反汇 ...

  5. Change ugly fonts in Firefox (KDE)

    When you use KDE the fonts in Firefox are ugly. This is the fix: Open with Kate: /home/yourusername/ ...

  6. Nightmare(搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1072 /* 题意: 迷宫内有入口和出口 在6分钟结束后炸弹会爆炸,但是迷宫内有重置炸弹的装置,可以重置炸弹的时间 ...

  7. UVa 11178计算几何 模板题

    #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...

  8. Python监控日志程序

    一个简易的日志监控的脚本,功能如下:1.windows环境2.当匹配日志关键字时会发出声音,匹配的关键字不同,播放的声音不同3.能做到实时响应 注意:是在win环境下哦 直接上代码吧 1 2 3 4 ...

  9. Sublime 注册码

    ----- BEGIN LICENSE ----- Andrew Weber Single User License EA7E-855605 813A03DD 5E4AD9E6 6C0EEB94 BC ...

  10. java 获取黑屏信息保存在list中,截取字符执行

    ArrayList<String> list1 = new ArrayList<String>(); Process p = Runtime.getRuntime().exec ...