大家的项目都是只支持竖屏的吧?大多数朋友(这其中当然也包括博主),都没有做过横屏开发,这次项目刚好有这个需求,因此把横竖屏相关的心得写成一遍文章供诸位参考。01.综述
大多数公司的项目都只支持竖屏,只有一两个界面需要同时支持横屏,就像视频 APP 一样,只有视频播放的时候需要横屏,其他时候都只允许竖屏。给出的 demo 中处理两种需要横屏的情形: * 第一种是录制视频时横屏 * 第二种是播放视频时横屏
具体使用演示请前往优酷视频查看:BLLandscape Demo。
02.录制视频横屏
一般可能只需要播放视频时横屏,录制横屏一般用不到,但是如果有朋友需要做横屏视频录制,这时候就需要录制横屏处理,就像下面这样的。
这个思路是这样的: * 横屏的时候,首先把要横屏的 view 从原先的 superView 中移除,添加到当前的 keyWindow 上,然后做 frame 动画,将窗口的高设为 view 的宽,窗口的宽设置为 view 的高,然后将 view 的旋转 90°,执行动画,就能得到当前的效果。
竖屏的时候,是一个相反的过程,先在窗口上做完动画,再将 view 插入到横屏之前的 superView 中的对应位置上。
2.1.横屏切换
我把这些实现都抽成一个 UIView 的分类,看一下实现:
// frame 转换. -(void)landscapeExecute{self.transform=CGAffineTransformMakeRotation(M_PI_2);CGRectbounds=CGRectMake(0,0,CGRectGetHeight(self.superview.bounds),CGRectGetWidth(self.superview.bounds));CGPointcenter=CGPointMake(CGRectGetMidX(self.superview.bounds),CGRectGetMidY(self.superview.bounds));self.bounds=bounds;self.center=center;}-(void)bl_landscapeAnimated:(BOOL)animatedanimations:(BLScreenEventsAnimations)