背景
现有的城市选择组件在车、货两端都有分别的实现,且除了传递的Type不同导致不同的布局和逻辑处理的差异,其整体的UI和总的逻辑处理大致都是相同的。所以,为了更加方便的调用和维护,我们将车货两端的城市选择功能抽成组件,为车、货以及相关组件提供功能调用。
简介
TYTCitySelectedView组件分类属于基础组件,为用户提供城市、距离以及定位的服务,封装了不同页面类型的页面布局和动画方法,开发者可以根据不同的场景进行调用。另外,如果开发者有特殊需求,在本组件没有更新的情况下,也可以根据需求自行定义界面和功能使用。
结构
1、功能划分
- TYTAreaSelectView : 组件封装类,所有的功能类根据不同的场景进行不同的布局和处理
- TYTTitleView : 顶部的提示文案的View
- TYTAreaSelectButView : 选择的历史省市区跳转的按钮View
- TYTCityView : 省市区选择View
- TYTHistoryView : 历史记录View
- TYTKilosView : 距离选择View
- TYTLocationView : 定位View
2、资源管理
图片资源都是通过resource_bundles来管理,bundle名称TYTCitySelectedView。
调用方法如下:
UIImageView *locationImg = [[UIImageView alloc] init];
[locationImg setImage:[UIImage city_imageNamed:@"newarealocation"]];
API注释
//初始化数据
-(instancetype)initWithNewAreaSelBlock:(AreaSelBlock)block andType:(TYTAreaType)type frame:(CGRect)frame;
//创建内部UI调用,传递初始值和类型
-(void)createUIWithSelectedPro:(NSString * *)proing city:(NSString* *)citying county:(NSString * *)countying kiloStr:(NSString* *)kiloStr andType:(TYTAreaType)type;
//重新选择的省市县操作
- (void)reloadNewAreaDataWithPro:(NSString * *)proing city:(NSString* *)citying county:(NSString * *)countying kiloStr:(NSString* *)kiloStr andType:(TYTAreaType)type;
//如果只有省市县拼接好的字符串则用此方法
-(void)reloadNewAreaDataWithStr:(NSString * *)ProCityCounty andType:(TYTAreaType)type;*
//找货动画:从上到下展示的动画方式,使用点:车版找货页面地址选择TYTFindGoodsStartType&TYTFindGoodsDestinationType、板车司机招聘TYTBCarInviteAndJobType、设备招聘TYTDeviceInviteType
- (void)downAnimation:(void (^ __**nullable)(BOOL finished))completion;
- (void)upAnimation:(void (^ __**nullable)(BOOL finished))completion;
//倒短动画:从上到下展示的动画,坐标和找货动画不同 使用点:范围倒短TYTFallShortRangeType、省内倒短TYTFallShortProvinceType
- (void)fallShortDownAnimation:(void (^ __**nullable)(BOOL finished))completion;
- (void)fallShortUpAnimation:(void (^ __**nullable)(BOOL finished))completion;
//查距离动画:从底部向上展示的动画方式 使用点:剩余的所有类型的Type
- (void)queryDistanceDownAnimation:(void (^ __**nullable)(BOOL finished))completion;
- (void)queryDistanceUpAnimation:(void (^ __**nullable)(BOOL finished))completion;
调用示例
TYTCitySelectedView组件是通过TYTAreaType的类型来处理内部逻辑,所以组件的调用方法都离不开TYTAreaType,下面先对它做一个简介:
typedef enum : int{
TYTFindGoodsStartType = 1, //1 找货出发地
TYTFindGoodsDestinationType,//2 为找货目的地
TYTSearchHistoryType, //3 为搜索历史记录
TYTBCarBuyType, //4 板车购买
TYTDeviceInviteType, //5 设备招聘
TYTBCarInviteAndJobType, //6 板车司机的招聘&求职
TYTBCarStoreFixAndPartsType,//7 板车维修商&板车配件商的附近功能
TYTCarDistanceInviteJobDriverType, //8 车版(car查距离&Good发货:出发地和目的地、板车司机发布招聘和求职)
TYTBusinessInfoMessageType, //9 商户信息管理的商户添加
TYTCarPreDestinationType, //10为车辆偏好目的地
TYTFallShortRangeType, //11倒短范围倒短
TYTFallShortProvinceType, //12省内倒短
TYTGoodsDistanceInviteJobDriverType, //13货版(查距离出发地和目的地、板车司机发布招聘和求职、设备司机招聘)
} TYTAreaType;
代码调用示例:
//初始化组件
newAreaView = [[TYTAreaSelectView alloc] initWithNewAreaSelBlock:^(TYTCity cityModel, NSString *kilos, TYTAreaType type) {
} andType:TYTBusinessInfoMessageType frame:CGRectMake(0, 0, Screen_Width, Screen_Height)];
[newAreaView createUIWithSelectedPro:_proStr city:_cityStr county:_countyString kiloStr:nil andType:TYTBusinessInfoMessageType];
newAreaView.delegate = self
[self.navigationController.view addSubview:newAreaView];
//调起动画,显示地址
[newAreaView queryDistanceUpAnimation:^(**BOOL** finished) {
}];
//结束动画,隐藏地址
[newAreaView queryDistanceDownAnimation:^(**BOOL** finished) {
}];
自定义使用
1、可单独使用的类
TYTKilosView、TYTLocationView、TYTTitleView、TYTHistoryView这四个类可以根据需求单独使用。
2、组合使用的类
如果想自定义城市选择、地址选择、城市按钮的页面,那么就需要一个新的Type,这个时候就需要根据需求,修改组件内部的Type逻辑处理,然后再进行自定义的布局和处理。