iOS视频横竖屏正确打开形式:调整动画执行出错问题




问题回放

如果我们在一个iOS项目中使用到了视频播放器就难免会遇到强制横竖屏的问题.这个老生常谈的问题我们只需要监听设备的方向改变的通知即可,一般情况是不会出现什么的问题的.但是事实真的是这样吗?网上在这方面的资料也是杂乱不堪,大部分只是说说如何进行强制横竖屏,没有进一步说明动画操作,虽然大部分的情况是没有任何问题的,可是当用户快速的从左横屏→竖屏→右横屏的时候就会出现PlayView的尺寸显示不正确的问题了.原因是当左横屏→竖屏的动画还未完成时(动画过程需要0.3s),设备已经完成了从竖屏到右竖屏的过程了.导致两个动画同时执行,界面就出现问题.当然了,还有如下的问题也是类似的.都是尺寸缩放动画错乱造成的!






解决思路

上面说到的这种问题我们该怎么解决呢?其实很简单,我们来自定义动画.通过布尔值(isPortraitFinished)来监控屏幕旋转的动画是否完成,如果完成我们才执行接下来的动画操作,或者结束操作.而且这里我加入了另外的一个布尔值(isFullScreen)来减少执行动画的次数.具体代码如下所示.

在这里我还是要推荐下我自己建的iOS开发学习群:680565220,群里都是学ios开发的,如果你正在学习ios ,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有iOS软件开发相关的),包括我自己整理的一份2018最新的iOS进阶资料和高级开发教程

在.m的类扩展中有以下属性.






扫描二维码关注公众号,回复: 2003566 查看本文章

在上一方法中,我们通过isPortraitFinished属性来隔断动画的执行.然后用户快速的旋转屏幕的话,我们会在第二个方法(portraitFinishaNextAction)中处理这种情况,当竖屏动画完成之后,我们还要判断当前设备的方向是否是竖屏,如果是,那么没有动画执行,如果不是的话,那么我们就再次执行旋转动画.代码如下所示.



好了,这里就完成我们的屏幕旋转动画的优化处理了,Demo链接地址会在文章尾部给出.

屏幕旋转的补充说明

这里有几点需要补充的,假定当期的播放页面可以在


的情况下进行返回上一个页面的操作.这时候我们需要先旋转屏幕,我们该如何实现呢?我们只需要在viewWillDisappear中写入如下代码即可.


第二补充点就是我们如果做锁屏操作怎么做才合适呢?比如我现在的项目中就同时有直播和点播,难道我要写两套代码吗?不,我们只需要在AppDelegate中设定设备是否可以旋转,以及设备旋转的方向,这里的值我们可以随意设定代码如下所示.

AppDelegate.h中的属性代码


这样我们只需要操作AppDelegate中的allowRotate属性即可.

结语

好了,这一次分享就到这里了.如果喜欢的话,欢迎点赞收藏,当然了,如果有任何问题都可以联系骚栋.或者在评论区提出来,我会及时回复的,谢谢.最后还是老惯例,附上实现代码的传送门.


问题回放

如果我们在一个iOS项目中使用到了视频播放器就难免会遇到强制横竖屏的问题.这个老生常谈的问题我们只需要监听设备的方向改变的通知即可,一般情况是不会出现什么的问题的.但是事实真的是这样吗?网上在这方面的资料也是杂乱不堪,大部分只是说说如何进行强制横竖屏,没有进一步说明动画操作,虽然大部分的情况是没有任何问题的,可是当用户快速的从左横屏→竖屏→右横屏的时候就会出现PlayView的尺寸显示不正确的问题了.原因是当左横屏→竖屏的动画还未完成时(动画过程需要0.3s),设备已经完成了从竖屏到右竖屏的过程了.导致两个动画同时执行,界面就出现问题.当然了,还有如下的问题也是类似的.都是尺寸缩放动画错乱造成的!






解决思路

上面说到的这种问题我们该怎么解决呢?其实很简单,我们来自定义动画.通过布尔值(isPortraitFinished)来监控屏幕旋转的动画是否完成,如果完成我们才执行接下来的动画操作,或者结束操作.而且这里我加入了另外的一个布尔值(isFullScreen)来减少执行动画的次数.具体代码如下所示.

在这里我还是要推荐下我自己建的iOS开发学习群:680565220,群里都是学ios开发的,如果你正在学习ios ,小编欢迎你加入,今天分享的这个案例已经上传到群文件,大家都是软件开发党,不定期分享干货(只有iOS软件开发相关的),包括我自己整理的一份2018最新的iOS进阶资料和高级开发教程

在.m的类扩展中有以下属性.







在上一方法中,我们通过isPortraitFinished属性来隔断动画的执行.然后用户快速的旋转屏幕的话,我们会在第二个方法(portraitFinishaNextAction)中处理这种情况,当竖屏动画完成之后,我们还要判断当前设备的方向是否是竖屏,如果是,那么没有动画执行,如果不是的话,那么我们就再次执行旋转动画.代码如下所示.



好了,这里就完成我们的屏幕旋转动画的优化处理了,Demo链接地址会在文章尾部给出.

屏幕旋转的补充说明

这里有几点需要补充的,假定当期的播放页面可以在


的情况下进行返回上一个页面的操作.这时候我们需要先旋转屏幕,我们该如何实现呢?我们只需要在viewWillDisappear中写入如下代码即可.


第二补充点就是我们如果做锁屏操作怎么做才合适呢?比如我现在的项目中就同时有直播和点播,难道我要写两套代码吗?不,我们只需要在AppDelegate中设定设备是否可以旋转,以及设备旋转的方向,这里的值我们可以随意设定代码如下所示.

AppDelegate.h中的属性代码


这样我们只需要操作AppDelegate中的allowRotate属性即可.

结语

好了,这一次分享就到这里了.如果喜欢的话,欢迎点赞收藏,当然了,如果有任何问题都可以联系骚栋.或者在评论区提出来,我会及时回复的,谢谢.最后还是老惯例,附上实现代码的传送门.

猜你喜欢

转载自blog.csdn.net/qq_41597941/article/details/80933964