单品页/结算页浮层样式统一,浮层较多的管理策略。
概述
1、每个浮层相互独立,可以看成一个独立的页面,不绑定场景来源,不绑定数据来源,不绑定响应回调(目前暂不需要扩展)。
2、所有浮层都通过OverlaysManager类 统一管理与外部的交互。
3、每个浮层都会被OverlaysManager持有一份,浮层视图只创建一次,浮层模型只创建一次,后续都是做更新处理
开发说明
浮层基类的开发
1、浮层DDCheckOutBaseOverlayerView是所有浮层的根基类。 中实现ConfigModel样式配置,扩展有弹起、关闭,背景透明度处理,动画处理等通用处理,扩展有DDCheckOutBaseOverlayerViewProtocol 基类协议,以后所有浮层的protocol 都继承自它。
2、浮层DDCheckOutNormalBaseOverlayerView是底部弹起浮层基类, 扩展有标题区域、关闭按钮、渐变背景通用视图,根据需要自行装载。
3、浮层DDCheckOutCenterAlertBaseOverlayerView 是屏幕中心Alert弹层基类。
4、DDCheckOutOverlayerPositionModel 是浮层信息模型,是浮层交互控制的核心,每个浮层都会保存自己的一份,但在浮层内部不做数据修改。通过配置sourceType 和dataSourceType 来控制不同场景和不同数据加载形式下的浮层展示。
具体浮层的开发
1、每个浮层都有自己对应的文件夹,如DeliveryWayChoice。主要包含的文件有OverlayerView(浮层类)、Model、ModelAdapter、logic等。
2、OverlayerView负责浮层与外部通过代理形式的交互,ModelAdapter 只负责将外部数据转换为浮层模型。OverlayerView 和 ModelAdapter 没有直接关联或引用等,他们都被OverlaysManager类 管理。
3、OverlayerView 类的具体写法
①、持有浮层model 并暴露在 .h 中,供外部数据交使用。在浮层创建之初,就进行init 创建,后续只做更新属性处理。
②、扩展浮层对应的protocol 必须继承自DDCheckOutBaseOverlayerViewProtocol 基类协议,通用命名:浮层名+Protocol ,一定要包含的代理方法
- (浮层模型 *)getModelForShow_浮层类名, 其他交互代理自行设置。
③、因自定义了新的protocol,需要在.m中,扩展一个属性delegate来存储代理。在.m 需要重写两个方法initWithModelConfig 和 reloadAllView。
④、initWithModelConfig 重写时,init 创建模型,转存代理,初始化视图。
⑤、reloadAllView 重写时,通过代理- (浮层模型 *)getModelForShow_浮层类名 获取浮层数据,再刷新整个视图。
4、ModelAdapter类的具体写法
①、ModelAdapter 只做浮层模型数据的更新处理,只关心数据,不涉及视图。根据浮层弹起,或浮层数据变化的情况,只扩展对应的类方法。
②、一级模型弹起时数据装配,需要浮层模型、webData、positionModel 三个参数来组装数据,根据positionModel 来抽取不同楼层在webData中对应的数据。
③、二级模型弹起时数据装配,需要浮层模型、webData、positionModel 、上级浮层模型四个参数来组装数据,根据positionModel 来区分,数据是从webData或上级浮层模型 或 webData 和上级浮层模型 或 已更新等数据处理方法,也区分不同楼层在webData中对应的数据。
④、局部数据更新时数据装配,需要浮层模型、需要更新的数据、对应位置等参数,更改指定数据。
5、其他的类的开发属于内部开发,根据需要自行配置,避免与外部交叉。
OverlaysManager的开发
1、每个浮层都是,相对独立的,只是集中在OverlaysManager 中管理。每个浮层的代码,展示方法、代理方法、创建方法都集中在一个#pragma mark 下。
2、OverlaysManager 在 .h 中 扩展一级浮层的调用方法供外部使用,需要配置一个DDCheckOutOverlayerPositionModel 参数,并用initWithFloorType方法初始化。
3、.m 中扩展一个可变数组,用来管理正在展示的浮层,展示则添加到数组,关闭则移除,并通过数组来控制浮层的透明度等。
4、.m 中引用浮层类和浮层ModelAdapter ,持有每个浮层实例,关闭浮层,浮层实例并不释放。
5、弹起浮层方法的写法
①、弹起浮层的方法只有一个,不同场景通过配置参数positionModel 的sourceType 和 dataSourceType。
②、将参数positionModel 拿给浮层持有,配置positionModel.overLayerType 浮层类型。
③、调用reloadAllView方法 ,reloadAllView方法内部会通过代理从OverlaysManager配置数据,紧接着刷新数据。
④、调用isCanShow 方法判断能否展示,能展示则继续执行。
⑤、调用show方法弹起浮层。
⑥、将显示的浮层添加到数组中。
⑦、调整浮层的透明度。
6、浮层代理方法的写法
①、实现 - (浮层模型 *)getModelForShow_浮层类名,通过浮层的positionModel.sourceType,区分不同的浮层弹起场景,并调用对应的ModelAdapter 方法,来装载浮层数据。
②、浮层代理,需要更新其他浮层的数据并刷新其他浮层,先调研ModelAdapter Refresh方法刷新数据,再配置positionModel.dataSourceType = DDCOOverLayerDataSourceType_partRefresh,来装载浮层数据并刷新。
③、浮层代理,能挑起其他浮层时,需要copy一份当前浮层positionModel,配置预调起浮层的positionModel.sourceType 和positionModel.dataSourceType后,可以通过浮层展示方法调起浮层。
④、浮层代理需要关闭浮层,可以给对应代理扩展一个参数needClose,控制浮层关闭的时机。
⑤、其他代理根据需要自行配置实现。
7、浮层实例的创建
①、浮层实例的创建是通过懒加载的形式,重写了get方法。
②、创建浮层视图单例时,传入一个modelConfig 参数,需要指定浮层相对于屏幕的frame、协议代理、白色视图相对于弹出的高度默认是0.7 。
网友评论