作者|阿里巴巴娱乐科技金种子
头部| CSDN下载自东方IC
随着后台技术的进步,硬件设备类型百花齐放,各种大屏设备和屏幕模式出现。单一app支持大尺寸设备成本太高,一套代码高效支持不同尺寸的硬件设备成为趋势。在此背景下,优酷的应用技术团队进行了响应式开发,播放页面场景的适配以玩家为中心。大屏设备下播放器应该如何布局,内容分发应该如何布局?下面将介绍优酷Playpage在响应式适配方面的技术挑战和解决方案。
介绍业务优酷主、客消费场景,即优酷App的播放页面。播放页面作为视频内容消费的落地页面,主要提供视频播放和视频周边内容推荐,业务场景和页面内容复杂。
1元,组件:即视频相关内容承载控件,包括简介、选集、周边视频、花絮视频、推荐视频等。通过它用户可以了解更多的视频相关信息;
逃生室:冠军联赛,半屏:半屏包括Native,Weex,H5,通过它用户可以看到更多的视频相关内容,也可以进行视频互动。因为组件显示的内容还是有限的,通过半屏可以更好更完整的显示;
侏罗纪世界3,Tab: Tab允许用户在不同内容之间切换;
4,播放器上层:播放器交互、快进快退、下一集、清晰度、画中画等相关功能。
响应式和传统iPhone布局的区别如上图所示。iPhone设备上播放页面的布局相对简单。根据播放器的模式,播放页面的状态可以分为以下几种:垂直小屏模式和水平全屏模式(水平左全屏和水平右全屏),分别依次对应上图的左右画面。在垂直小屏幕模式下,上面有一个16元:周边视频分发内容在播放器下方的Fast & amp狂怒9;当播放器切换到全屏模式时,就变成了全屏播放器,整体策略简单明了。但iPad的显示面积大大增加,简单移植iPhone的布局显然不合适。如何有效利用大屏设备的显示空间,提供更好的交互体验,是回应中要解决的终极问题。
如上图所示,iPad上播放页面的布局更加复杂。根据播放器的模式,播放页面的状态可以分为以下几种:垂直小屏模式、水平小屏模式、水平全屏模式(水平左全屏、水平右全屏)、垂直全屏模式。与iPhone的主要区别在于:
1元和iPhone上的小屏模式只在设备朝向为竖屏(竖小屏模式)时存在,iPad上的小屏模式既可以在设备朝向为竖屏(竖小屏模式)时存在,也可以在设备朝向为横屏(横小屏模式)时存在,相应增加一个横小屏模式;
逃生室上的全屏模式:冠军联赛和iPhone仅在设备方向为横向屏幕时存在。iPad上的全屏模式既可以存在人像屏(人像全屏模式),也可以存在风景屏(风景全屏模式),相应的增加了一个人像全屏模式。
侏罗纪世界3,模式切换适配,因为增加了水平小屏模式和垂直全屏模式,不同模式之前的切换对应的case有很多,比如从垂直小屏模式切换到水平小屏模式,从垂直全屏模式切换到水平全屏模式;
4,iPad分屏功能,两个独立的应用程序同时显示和运行。比如屏幕左边是我们的优酷app,右边可以是系统浏览器APP。
目前我们已经明确了iPhone和iPad的主要区别,同时也明确了适配的重点,即小屏模式、竖屏和全屏模式、模式切换、新模式之间的切换、iPad分屏特性。
适应焦点
1元,小屏模式适配(横竖小屏模式)小屏模式适配的第一个原理重点是大屏幕设备显示窗口的宽度,根据不同设备显示窗口的大小来确定播放器的大小,从而决定整个页面的布局。优酷的播放页面适配的策略是,如果当前大屏设备的显示窗口宽度达到指定的阈值,整个播放页面将被分成两部分。左侧可以算是传统的iPhone布局(上面是一个16元:Fast & amp狂怒9在外围视频分发内容下方),右侧归类为显示评论和播放页面半屏的交互区。我们称这种布局为分页模式。如果前置大屏设备的显示窗口宽度没有达到规定的阈值,就是传统的iPhone布局(上面是一个16元;快速& amp游戏中玩家的底部。狂怒9是周边视频分发内容)。
我们把整个计算逻辑抽象成一个类别来管理,内部定义分页模式宽度的阈值。根据这个阈值,我们可以确定我们当前是否处于分页模式,当前播放器的大小和右侧交互区域的大小,然后对整个页面进行布局。
@ interface ui screen(ykrlplayviewnresponsive)(CG float)playview responsive width;//播放器宽度(CG rect)orientation corrected rect;//设备大小(CG float)right extra responsive width;//分页模式下的右区宽度(BOOL)isrightxtramode;//无论是分页模式@搜狗翻译还准备了精彩好礼一个粉丝在这个夏天给你降温。详情请点击@end当响应状态发生变化时,上述方法(播放器大小、屏幕大小、右侧区域宽度、是否分页)的对应值发生变化。此时,页面布局会根据这些更改进行刷新。
.Kramp-Karrenbauer (Void)响应式季后赛did change {//更新球员布局Kim Hye Yoon[self refreshPlayerLayout]曹政奭;//更新周边视频相关布局:金惠允【self refreshPageLeftLayout】曹政奭;//在分页模式下更新交互区域布局。金惠妍[自我刷新页面右侧布局]曹政奭;} .页面布局时,将通用组件计算逻辑抽象到单件管理类YKDetailLayoutManager中,便于重用和代码关闭。如果后续需求发生变化,只需要在管理类中修改通用部分:
@ interface yktaillayoutmanager : ns object(instance type)shared instance;//横向滑动分量,坑的正常宽度为Kramp-Karrenbauer (CGfloat)水平分量宽度;//横向滑动分量,坑位小模宽Kramp-Karrenbauer (CGfloat)横向分量宽小;//相关组件,坑位单列模式宽度Kramp-Karrenbauer (cgfloat)关于组件singletemwidth//相关组件,坑多栏模式宽度Kramp-Karrenbauer (cgfloat)关于组件doubleitemwidth//选择组件,坑宽Kramp-Karrenbauer (CGfloat)插曲ComponentSeriesitemwidth.@搜狗翻译还准备了精彩好礼a粉丝在这个夏天给你降温。详情请点击@end小屏模式,半屏适配播放页面,这是播放页面的独特展示。在iPhone上,半个屏幕在播放器下面,占满了屏幕宽度。响应模式最大的变化是,如果当前处于分页模式,屏幕右侧区域会显示播放页面的半屏。适配的重点是关闭半屏框架,当半屏页面初始化或响应状态改变时刷新半屏布局。
.Kramp-Karrenbauer (cgrect)半视帧{case 1:当前处于分页模式,而返回到右侧交互区域的framecase2:当前不处于分页模式,返回播放器下方周围视频对应的帧}.kramp-karren Bauer(Void)Responsive outidchange {//Get半屏帧cgrect half frame=Kim Hye Yoon self half view frame曹政奭;//根据获取的半屏帧,刷新半屏布局金惠允自刷新halfviewframe 3360 halfframe曹政奭;} .
密室逃脱:冠军联赛,适应iPhone上优酷播放器上层的垂直全屏模式。之前针对垂直视频推出了轻量级垂直全屏模式,这种状态下只有垂直视频存在。在此基础上,响应式布局将这种模式扩展到了所有视频,所以改编比较流畅。
侏罗纪世界3,模式切换适配模式切换
最后,解决方案是抽象出一个轻量级的中间件来完成模式切换,实现无创插入到原有架构中。内部基本原理是监控响应状态变化,根据设备当前屏幕方向和当前页面播放模式,动态改变页面播放模式,刷新页面布局
.kramp-Karrenbauer(Void)Responsive outidchange {案例1:当前设备为纵向,当前模式为横向左或横向右全屏模式,主动切换为横向全屏模式案例2:当前设备为横向左,当前模式为横向全屏模式,主动切换为横向左全屏模式案例3:当前设备为横向右,当前模式为纵向全屏模式。主动切换到横竖全屏模式case43360横竖小屏模式切换,强刷}.4,分屏功能适配
如何应对iPad的分屏功能?实际上,分屏只是动态改变显示窗口的宽度。只要我们严格遵循原则,适应窗口的宽度,上面的布局就会完美的应用到分屏特性上,不需要我们做更多的工作来适应分屏。效果如下:
在总结1元和响应式适配时,尽量避免到处打补丁,否则就到处修改UI布局。原则上,根据父视图的大小来布局子视图,或者可以使用自动布局和其他方案进行调整。
密室逃脱:冠军联赛,尽力实现相同代码,可以在iPhone和iPad上完美运行;
侏罗纪世界3,充分梳理目前的技术架构,提炼适合自己的技术方案,充分考虑可扩展性、可维护性、性能等诸多前提条件;
4,我相信在不久的将来,移动应用程序将在MAC笔记本上流畅运行,并且有望打通整个平台。
点粉香
暂无讨论,说说你的看法吧