优酷响应式在消费场景的落地 iOS | 《优酷响应式布局技术全解析》第六章

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本章介绍 优酷响应式在消费场景的落地 iOS

上一章:优酷APP响应式布局在消费场景的落地Android | 《优酷响应式布局技术全解析》第五章>>>
下一章:优酷APP响应式布局之测试方案 | 《优酷响应式布局技术全解析》第七章>>>

作者| 阿里巴巴文娱技术 金籽

一、背景

随着科技的进步,硬件设备的类型也是百花齐放,出现了各种各样的大屏设备及屏幕模式,单独APP去支撑大尺寸设备成本太高,一套代码高效支撑不同尺寸的硬件设备成为了一种趋势。在此背景下,优酷应用技术团队进行了响应式开发,播放页场景的适配重点是围绕播放器进行的,大屏设备下播放器应该如何布局、内容分发应该如何布局?下面将介绍优酷播放页在响应式适配上遇到的技术挑战及解决方案。

二、业务介绍

优酷主客消费场景即优酷App的播放页。播放页作为视频内容消费的落地页,主要提供视频播放及视频周边内容推荐,业务场景及页面内容都比较复杂。

1、 组件:即视频相关内容承载控件,包括简介,选集,周边视频,花絮视频,推荐视频等,通过这些内容让用户了解更多的视频相关的信息;

2、 半屏:包括Native、Weex、H5的半屏,通过半屏用户可以看到更多的视频相关内容,也可以承载视频互动。因为组件展示的内容还是有限,通过半屏可以更好更全地展示;

3、 Tab:通过Tab让用户在不同的内容之间切换;

4、 播放器上层:播放器交互相关功能,快进快退、下一集、清晰度、画中画等。

三、响应式与传统iPhone布局差异

image.png

如上图所示,播放页在iPhone设备上的布局比较简单,按照播放器的模式将播放页的状态分为以下几种:竖小屏模式、横全屏模式(横左全屏、横右全屏),依次对应上面的左图和右图。在竖小屏模式的时候上面是一个16:9的播放器下面是周边视频分发内容,当播放器切换到全屏模式的时候则变成一个全屏大小的播放器,整体策略简单清晰。但是iPad显示区域大大增加,如果简单的把iPhone端的布局移植过来显然是不合适的,如何有效的利用大屏设备的显示空间,提供更好的交互体验,才是响应式最终要解决的问题。

image.png

image.png

如上图所示,播放页在iPad上的布局就比较复杂了,按照播放器的模式将播放页分的状态分为以下几种:竖小屏模式、横小屏模式、横全屏模式(横左全屏、横右全屏),竖全屏模式,与iPhone端的主要区别是:

1、iPhone上小屏模式仅存在于设备方向是竖屏的时候(竖小屏模式),iPad上小屏模式既可以存在于设备方向是竖屏(竖小屏模式)也可以存在于设备方向是横屏(横小屏模式)对应的增加了一种横小屏模式;

2、iPhone上全屏模式仅存在于设备方向是横屏的时候,iPad上全屏模式既可以存在于设备方向是竖屏(竖全屏模式)也可以存在于设备方向是横屏(横全屏模式),对应的增加了一种竖全屏模式;

3、模式切换适配,由于新增加了横小平模式、竖全屏模式,那么不同模式之前的切换对应的也就增加了很多case,比如竖小屏模式切换到横小屏模式、竖全屏模式切换到横全屏模式;

4、iPad分屏特性,两个独立APP同时显示运行,举例屏幕上左边是我们优酷APP,右面可以是系统浏览器APP。

当前我们理清楚了iPhone和iPad的主要区别,同时也就明确了适配的重点,即小屏模式、竖全屏模式、模式切换、新增模式之间的切换、iPad分屏特性。

四、适配重点

1、小屏模式适配(横&竖小屏模式)

小屏模式适的配第一原则,重点关注大屏设备显示Window的宽度,根据不同设备显示Window的大小来确定播放器的大小,进而决定了整个页面的布局。优酷播放页适配的策略是如果当前大屏设备显示Window的宽度达到指定阀值,就会将整个播放页划分为两部分,左边可以看成是传统的iPhone布局(上面是一个16:9的播放器下面是周边视频分发内容),右边划归为互动区用于显示评论及播放页半屏,我们将这种布局称为分页模式。如果前大屏设备显示Window的宽度没有达到指定阀值,就是传统的iPhone布局(上面是一个16:9的播放器下面是周边视频分发内容)。

我们将整个计算逻辑抽象到一个分类中去管理,内部定义好分页模式宽度的阀值,根据这个阀值来确定当前是否处于分页模式、当前播放器的大小、右边互动区的大小,进而进行整个页面的布局

@interface UIScreen (YKRLPlayViewResponsive)
+ (CGFloat)playViewResponsiveWidth;      //播放器宽度
+ (CGRect)orientationCorrectedRect;      //设备尺寸
+ (CGFloat)rightExtraResponsiveWidth;    //分页模式下右边区域宽度
+ (BOOL)isRightExtraMode;                //是否处于分页模式下
@end

当响应式状态发生变化的时候,上面的方法(播放器尺寸、屏幕尺寸、右边区域宽度、是否分页)返回值对应的发生变化,此时根据这些变化去刷新页面布局

...
- (void)responsiveLayoutDidChange
{
    //更新播放器布局
    [self refreshPlayerLayout];
    
    //更新周边视频相关布局
    [self refreshPageLeftLayout];
    
    //更新分页模式下互动区布局
    [self refreshPageRightLayout];
}
...

页面布局的时候,通用的组件计算逻辑抽象成单例管理类YKDetailLayoutManager,方便复用及代码收口,后续如发生需求变化通用部分只需要在管理类中修改即可:

@interface YKDetailLayoutManager : NSObject

+(instancetype)sharedInstance;

//横滑组件,坑位正常宽度
-(CGFloat)horizontalComponentItemWidth;    

//横滑组件,坑位小模式宽度     
-(CGFloat)horizontalComponentItemWidthSmall; 

   
//相关组件,坑位单列模式宽度
-(CGFloat)aboutComponentSingleItemWidth;   

//相关组件,坑位多列模式宽度    
-(CGFloat)aboutComponentDoubleItemWidth; 

//选集组件,坑位宽度       
-(CGFloat)episodeComponentSeriesItemWidth;      
...
@end

小屏模式下播放页半屏适配,播放页半屏是播放页特有的一种展示,在iPhone上半屏处于播放器的下方并撑满屏幕宽度,响应式下最大的变更是如果当前处于分页模式下,播放页半屏将展示在屏幕的右侧区域上面,适配重点就是收口半屏Frame,当半屏页面初始化或者响应式状态变化的时候刷新半屏布局。

...
- (CGRect)halfViewFrame
{
case1:当前是分页模式,返回右边互动区的frame

case2:当前不是分页模式,返回播放器下面周边视频对应的frame

}
...

...
- (void)responsiveLayoutDidChange
{
    //获取半屏的frame
    CGRect halfFrame = [self halfViewFrame];
    
    //根据获得的半屏frame,刷新半屏布局
    [self refreshHalfViewWithFrame:halfFrame];
}
...

2、竖全屏模式适配

在iPhone上优酷播放器上层之前针对竖版视频推出过轻量级的竖全屏模式,只有竖版视频才存在这种状态,响应式布局在此基础上将这种模式推广到全部视频上,所以适配起来比较顺畅。

3、模式切换适配

在iPad上模式切换变得比较复杂,新增了一些iPone上并不存在的case,比如竖小屏模式切换到横小屏模式、横小屏模式切换到竖小屏模式、横全屏模式换到竖全屏模式、竖全屏模式切换到横全屏模式。我们的适配原则是:

1) 遵守播放器上层架构开发标准;
2) 对播放器上层架构侵入较小;
3) 代码聚合解耦。

最终方案是抽象出一个轻量级别的中间件来完成模式的切换,对原有架构实现无侵入插入,内部基本原理就是监听响应式的状态变化,根据当前的设备屏幕方向及当前播放页的模式,来动态改变播放页的模式并且刷新页面布局:

...
- (void)responsiveLayoutDidChange
{   

case1: 
当前设备是竖屏方向,当前模式是横左或横右全屏模式 , 主动切换到竖全屏模式

case2: 
当前设备是横左方向,当前模式是竖全屏模式, 主动切换到横左全屏模式

case3: 
当前设备是横右方向,当前模式是竖全屏模式, 主动切换到横右全屏模式

case4: 
横小屏模式和竖小屏模式之间切换, 要强制刷一下
 
}
...

4、分屏特性适配

iPad分屏特性如何处理呢?其实分屏只是动态的改变了显示Window的宽度,只要我们严格遵循原则按照Window的宽度去适配,上面的布局方式将会完美的应用于分屏特性,我们并不需要去做更多的工作来适配分屏。效果如下:

image.png

五、总结

1、响应式适配的时候尽量避免到处打patch,到处 if else 的去修改UI布局,原则上按照父 view大小来布局子view,也可以使用自动布局等方案进行适配;

2、尽最大努力实现同样代码,在iPhone和iPad上都能完美运行;

3、充分梳理好当前的技术架构,提炼出适合自己的技术方案,要充分考虑可扩展性、可维护性、性能等诸多前置条件;

4、相信在不久的将来,移动端APP将会流畅的运行在MAC笔记本上,全平台打通大有可为。

相关文章
|
15天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
55 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4月前
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
17天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
40 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
17天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
48 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
2月前
|
存储 人工智能 NoSQL
Tablestore深度解析:面向AI场景的结构化数据存储最佳实践
《Tablestore深度解析:面向AI场景的结构化数据存储最佳实践》由阿里云专家团队分享,涵盖Tablestore十年发展历程、AI时代多模态数据存储需求、VCU模式优化、向量检索发布及客户最佳实践等内容。Tablestore支持大规模在线数据存储,提供高性价比、高性能和高可用性,特别针对AI场景进行优化,满足结构化与非结构化数据的统一存储和高效检索需求。通过多元化索引和Serverless弹性VCU模式,助力企业实现低成本、灵活扩展的数据管理方案。
78 12
|
2月前
|
存储 缓存 人工智能
深度解析CPFS 在 LLM 场景下的高性能存储技术
本文深入探讨了CPFS在大语言模型(LLM)训练中的端到端性能优化策略,涵盖计算端缓存加速、智能网卡加速、数据并行访问及数据流优化等方面。重点分析了大模型对存储系统的挑战,包括计算规模扩大、算力多样性及数据集增长带来的压力。通过分布式P2P读缓存、IO加速、高性能存算通路技术以及智能数据管理等手段,显著提升了存储系统的吞吐量和响应速度,有效提高了GPU利用率,降低了延迟,从而加速了大模型的训练进程。总结了CPFS在AI训练场景中的创新与优化实践,为未来大模型发展提供了有力支持。
|
4月前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
126 17
|
3月前
|
存储 安全 数据安全/隐私保护
深入解析iOS 14隐私保护功能:用户数据安全的新里程碑
随着数字时代的到来,个人隐私保护成为全球关注的焦点。苹果公司在最新的iOS 14系统中引入了一系列创新的隐私保护功能,旨在为用户提供更透明的数据使用信息和更强的控制权。本文将深入探讨iOS 14中的几项关键隐私功能,包括App跟踪透明性、简化的隐私设置以及增强的系统安全性,分析它们如何共同作用以提升用户的隐私保护水平。
203 3
|
3月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
4月前
|
数据安全/隐私保护 iOS开发 开发者
iOS 14隐私保护新特性深度解析####
随着数字时代的到来,隐私保护已成为全球用户最为关注的问题之一。苹果在最新的iOS 14系统中引入了一系列创新功能,旨在增强用户的隐私和数据安全。本文将深入探讨iOS 14中的几大隐私保护新特性,包括App跟踪透明度、剪贴板访问通知和智能防追踪功能,分析这些功能如何提升用户隐私保护,并评估它们对开发者和用户体验的影响。 ####

热门文章

最新文章

  • 1
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    108
  • 2
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    14
  • 3
    iOS各个证书生成细节
    27
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    134
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    41
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    55
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 8
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    40
  • 9
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    155
  • 10
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    317
  • 推荐镜像

    更多