侧边栏壁纸
博主头像
钱学超博主等级

火星人,1万小时法则的忠实拥趸。技术宅,象棋和羽毛球爱好者,马拉松PB成绩:4小时零8分。坚持认为算法是计算机的灵魂。喜欢解决问题,喜欢手工,喜欢与朋友们聊天喝酒吹牛X。

  • 累计撰写 54 篇文章
  • 累计创建 306 个标签
  • 累计收到 52 条评论
标签搜索

目 录CONTENT

文章目录

IOS老大难问题解决路径。

钱学超
2022-01-01 / 0 评论 / 0 点赞 / 392 阅读 / 1,350 字 / 正在检测是否收录...
  1. 碰到一个棘手的问题。
  2. IOS的App,一般都是竖屏的,偶尔有横屏的。很少见到同时支持横屏和竖屏。这次就遇到了。
  3. 也是因为IOS版本升级导致的无法解决。

  1. 问题:

IOS中,需要放置一个播放器,播放视频时,需要让视频全屏。此时,如果视频是横向的,应该把屏幕自动旋转90度,放大视频至全屏。效果最好。
可是,要做到这一点并不容易。因为之前已经确定了播放器。播放器本身并不支持自己旋转屏幕,而是跟随系统屏幕方向。此时更改播放器成本太高。因此需要实现:一个App大部分页面都是竖屏的,但是在某一个特殊页面,需要变成横屏。而实现了这一点,在IOS上,只需要在工程属性页面中选中App支持的屏幕方向为:portrait,landscapeRight即可。
问题时,如果实现了landscape屏幕方向,那么,手机首先横屏过来,再启动app,此时就会遇到一个问题,之前app的启动图无法跟随系统旋转而旋转。
所以,可以看到的效果就是,横屏状态下,看到了竖屏状态下的启动图,上面一部分,下面一部分全部被切掉。很难看。

  1. 因此需要实现的最终目标是:当app横屏启动时,也需要让启动图是竖屏的模式:启动图并不需要进行横屏设计,因为首页面是没有横屏设计的。
  2. 为了达到这个目标,有以下几个思路。
  1. 在app启动的时候,强制使用代码设置屏幕方向为竖屏。
  2. 使用两张不同的启动图,横屏和竖屏启动图,在不同的屏幕方向时,采用不同的启动图。
  3. 不显示启动图,使用flutter自己的第一个界面作为启动图。
  4. 修改启动图为正方形,无论横屏竖屏,都能完整显示。
  1. 挨个实验,发现只有第二点可能行得通。
  1. 使用强制横屏或者竖屏的方式,在IOS13之前的代码可能行得通。未能尝试,但是在IOS15.0以后,肯定是不行的,经过多次尝试,无论是IOS模拟器还是真机,都无法强制竖屏或者横屏。
  2. 使用flutter的界面作为启动图,实际上是错过了真正的启动图显示时间,而这个时间范围内,会显示一张全色:白色的界面或者黑色界面。并且时间有点长。
  3. 修改启动图虽然可是实现,但是毕竟修改了原有设计,这跟程序员无所不能的理论思想相悖离,所以作为一名骄傲的程序员,我们无论如何不能这么干。
  1. 那么,怎样实现一个app拥有两种不一样的启动图呢?
  2. 我们可以将正常的app的启动图旋转90度(逆时针)这样,将它作为横屏启动图,那么看起来,就是跟正常的竖屏启动图一样了,也就达到了统一和谐的效果了。
  3. 问题来了,我们怎样做到两种启动图呢?百度一下午,并未拿到合适的解决方案,无奈之下,还是爬出去看看。
  4. 在stackoverflow上看到了一个帖子,非常非常有帮助。贴出来大家看看。https://stackoverflow.com/questions/8777629/iphone-storyboard-different-scene-for-portrait-and-landscape
  5. 这样,我们就可以按照它的实现方式试一下了。
  6. 不用怀疑,看官们,我已经实现了。成功了。
  7. 嘿,照抄而已。
  8. https://github.com/jjochen/AdaptiveLaunchScreen
  9. 这个是人家做的demo,可以学习一下这个设计思路和设计方法,下面我们再遇到类似的问题,起码知道,这是可以解决的。
  10. 再贴个图,让看官们看起来比较方便一点。
  11. fXN9X.png
0

评论区