XXXXXX.Options.Clazz
类似格式键入,Xcode 会自动补全当前组件中包含 clazz
关键字的接口选项,方便用户知道自定义需要继承哪些文件。_photoEditMultipleComponent.options.editMultipleOptions.viewClazz
对应的是视图的接口,即继承 TuSDKPFEditMultipleView
为父类,修改对应界面布局的方法。_photoEditMultipleComponent.options.editMultipleOptions.componentClazz
对应的是控制器的接口,即继承 TuSDKPFEditMultipleController
为父类,修改对应的逻辑的方法。Options.viewClazz
对应的是视图, Options.componentClazz
对应的是控制器,SDK 会自动提示此时的控件所在的具体的文件名称,方便用户进行自定义。TuSDK 2.5.0
添加扩展方法增加前缀,避免重名,例如 initView
方法修改为 lsqInitView
方法。完成升级后请注意相关方法名的变更。TuSDK.bundle/ui_default
目录内的图标。Resources/Base.lproj/Localizable.strings
文件中的字段,手动集成请更换 TuSDK.strings
文件中的字段。可改变 SDK 内的文字显示。TuSDK.strings
进行制作对应的语言文件。PROJECT
选项里的 Info
中的 localizations
中添加对应语言项。以裁剪组件自定义界面
为例,对原有界面进行修改需要继承 TuSDKPFEditTurnAndCutView
类,添加了新的控件,需要进行重新声明
@interface ExtendEditTurnAndCutView : TuSDKPFEditTurnAndCutView
/**
* 向右旋转按钮
*/
@property (nonatomic, readonly) UIButton *trunRightButton;
@end
在裁切组件进行启动的时候对子类视图进行指定
TuSDKPFEditTurnAndCutOptions *opt = [TuSDKPFEditTurnAndCutOptions build];
opt.viewClazz = [ExtendEditTurnAndCutView class];
在子类中重写 lsqInitView
方法重写新的需求,更改界面及对应功能
/**
* 每个视图都会执行lsqInitView,自定义视图在这里开始
*/
-(void)lsqInitView;
{
// !!!!!!!!!!!
// 初始化父类的方法,这里很重要
[super lsqInitView];
// 可以更改界面的相关属性
// 修改底部工具栏背景
self.bottomBar.backgroundColor = lsqRGB(255,123,44);
// 改变底部镜像按钮为向右旋转按钮
// 隐藏镜像按钮
self.bottomBar.mirrorButton.hidden = YES;
// 创建向右旋转按钮
_trunRightButton = [UIButton buttonWithFrame:self.bottomBar.mirrorButton.frame
imageLSQBundleNamed:@"style_default_edit_button_trun_right"];
// 绑定动作
[_trunRightButton addTouchUpInsideTarget:self action:@selector(onImageTurnRightAction)];
// 添加到视图
[self.bottomBar addSubview:_trunRightButton];
}
更改了底部动作栏的布局,添加了新的功能按钮,并处理相应的点击事件
/**
* 向右旋转图片按钮的点击事件处理
*/
- (void)onImageTurnRightAction;
{
[self.editImageView changeImage:lsqImageChangeTurnRight];
}
提醒:使用裁切组件,要遵守代理 TuSDKPFEditTurnAndCutDelegate
,执行代理方法
- (void)onTuSDKPFEditTurnAndCut:(TuSDKPFEditTurnAndCutViewController *)controller result:(TuSDKResult *)result;
自定义底部动作栏上子视图时,需另外继承自TuSDKPFEditTurnAndCutBottomView
,同时对子类视图进行指定
opt.bottomBarViewClazz = [ExtendTuSDKPFEditTurnAndCutBottomView class];
在子类中重写 lsqInitView
方法,自定义界面
@interface ExtendEditTurnAndCutBottomView : TuSDKPFEditTurnAndCutBottomView
@end
@implementation changeEditTurnAndCutBottomView
-(void)lsqInitView;
{
[super lsqInitView];
// 修改完成按钮背景颜色,具体的颜色只需要替换lsqRGB字段内的参数就好,具体颜色显示需要自己处理
[_completeButton setStateNormalBackgroundImageColor:lsqRGB(123, 145, 255)];
}
以相机组件界面自定义为例,对原有界面进行修改,需要对相应的界面的类进行继承
/**
* 相机组件范例 - 相机视图控制器
*/
@interface ExtendCameraBaseController : TuSDKPFCameraViewController
@end
/**
* 相机组件范例视图自定义
*/
@interface ExtendCameraBaseView : TuSDKPFCameraView
@end
/**
* 相机组件范例视图 滤镜行视图
*/
@interface ExtendCameraBaseFilterItemCell : TuSDKCPGroupFilterItemCell
@end
在相机组件进行启动的时候对子类视图进行指定
TuSDKPFCameraOptions *opt = [TuSDKPFCameraOptions build];
opt.componentClazz = [ExtendCameraBaseController class];
opt.viewClazz = [ExtendCameraBaseView class];
opt.filterBarTableCellClazz = [ExtendCameraBaseFilterItemCell class];
在子类 ExtendCameraBaseView
中重写 lsqInitView
方法,在方法内重写新的需求
-(void)lsqInitView;
{
// !!!!!!!!!!!
// 初始化父类的方法,这里很重要
[super lsqInitView];
// 更开默认相机控制栏视图的属性
[_configBar setSizeHeight:44];
//关闭按钮隐藏,并在 controller 的方法中进行了重写
_configBar.closeButton.hidden = YES;
[_configBar.flashButton setOriginX:10];
// 更改闪光灯视图的属性
[_flashView setFlashFrame:_configBar.flashButton.frame];
}
在子类 ExtendCameraBaseFilterItemCell
中重写 lsqInitView
方法,在方法内重写新的需求
-(void)lsqInitView;
{
// !!!!!!!!!!!
// 初始化父类的方法,这里很重要
[super lsqInitView];
// 标题视图
_titleView.hidden = YES;
}
-(id)setSize:(CGSize)size;
{
[super setSize:size];
// 图片视图
_thumbView.frame = _wrapView.bounds;
// 标题视图
_titleView.hidden = YES;
return self;
}
在子类 ExtendCameraBaseController
中重写 - (void)configDefaultStyleView:(TuSDKPFCameraView *)view;
方法,在方法内重写新的需求
/**
* 配置默认样式视图
*
* @param view 默认样式视图 (如需创建自定义视图,请覆盖该方法,并配置自己的视图类)
*/
- (void)configDefaultStyleView:(TuSDKPFCameraView *)view;
{
if (!view) return;
[super configDefaultStyleView:view];
UIButton *closeButton = [UIButton buttonWithFrame:CGRectMake(20, [view.bottomBar getCenterY:60] + 8, 60, 60)
title:LSQString(@"lsq_cancel", @"取消") font:lsqFontSize(16)
color:[UIColor whiteColor]];
// 关闭摄像头按钮
[closeButton addTouchUpInsideTarget:self action:@selector(cancelAction)];
[view.bottomBar addSubview:closeButton];
}
提醒:使用滤镜,要遵守代理 TuSDKPFNormalFilterGroupDelegate
,执行代理方法
/**
* 选中一个滤镜
*
* @param view 裁剪与缩放控制器滤镜视图
* @param item 滤镜分组元素
*
* @return 是否允许继续执行
*/
- (BOOL)onTuSDKPFNormalFilterGroup:(TuSDKPFNormalFilterGroupView *)view
selectedItem:(TuSDKCPGroupFilterItem *)item;
{
if (item.type == lsqGroupFilterItemFilter) {
return [self onSelectedFilterCode:[item filterCode]];
}
return YES;
}
下面以照片美化组件界面为例,裁切 + 滤镜 + 贴纸组件与此相似
修改界面视图,需要继承 TuSDKPFEditMultipleView
类
@interface SimpleEditMultipleView : TuSDKPFEditMultipleView
@end
在照片美化组件进行启动的时候对子类视图进行指定
_photoEditMultipleComponent.options.editMultipleOptions.viewClazz = [SimpleEditMultipleView class];
在子类中重写 lsqInitView
方法重写新的需求,更改界面视图的相关属性,代码只是举例并未一一列举
-(void)lsqInitView;
{
// !!!!!!!!!!!
// 初始化父类的方法,这里很重要
[super lsqInitView];
// 改变 view 的背景颜色
self.backgroundColor = [UIColor redColor];
// 创建导航栏返回按钮
_cancelButton = [UIButton buttonWithFrame:CGRectMake(0, 0, 100 , 100) backgroundImageLSQBundleNamed:@"style_default_edit_button_cancel_bg"];
// 设置按钮的属性
[_cancelButton setBackgroundColor:[UIColor yellowColor]];
[_cancelButton setTitle:(LSQString(@"修改此处", @"更改按钮")) forState:UIControlStateNormal];
// 创建导航栏完成按钮
_doneButton = [UIButton buttonWithFrame:CGRectMake(self.getSizeWidth-70, 0, 100, 100) backgroundImageLSQBundleNamed:@"style_default_edit_button_confirm_bg"];
// 设置按钮的属性
[_doneButton setBackgroundColor:[UIColor yellowColor]];
[_doneButton setTitle:(LSQString(@"修改此处", @"更改按钮")) forState:UIControlStateNormal];
// 将按钮添加至视图
[self addSubview:_cancelButton];
[self addSubview:_doneButton];
// 改变 optionBar 的 frame
self.optionBar.frame = CGRectMake(0, 400, self.frame.size.width, 200);
// 改变 optionBar 滑动视图的背景颜色
self.optionBar.wrapView.backgroundColor = [UIColor blackColor];
// 改变步骤记录视图 stepView 背景颜色
self.stepView.backgroundColor = [UIColor yellowColor];
// 改变步骤记录视图 stepView 的 frame
self.stepView.frame = CGRectMake(0, 200, self.frame.size.width, 100);
// 改变步骤记录视图 stepView 的 上一步 button 的背景颜色
self.stepView.prevButton.backgroundColor = [UIColor blackColor];
// 改变步骤记录视图 stepView 的 下一步 button 的背景颜色
self.stepView.nextButton.backgroundColor = [UIColor greenColor];
// 改变图片视图 imageView 的 frame
self.imageView.frame = CGRectMake(0, 0, self.frame.size.width, 300);
// 改变图片视图 imageView 的背景色
self.imageView.backgroundColor = [UIColor redColor];
}
下面以自定义照片美化组件界面为例,其他组件都与此相似
修改导航栏按钮布局,需要继承 TuSDKPFEditMultipleView
类
@interface SimpleEditMultipleView : TuSDKPFEditMultipleView
@end
在照片美化组件进行启动的时候对子类视图进行指定
_photoEditMultipleComponent.options.editMultipleOptions.viewClazz = [SimpleEditMultipleView class];
在子类中重写 lsqInitView
方法重写新的需求,更改导航栏的相关属性
-(void)lsqInitView;
{
// !!!!!!!!!!!
// 初始化父类的方法,这里很重要
[super lsqInitView];
// 创建导航栏返回按钮
_cancelButton = [UIButton buttonWithFrame:CGRectMake(0, 0, 100 , 100)
backgroundImageLSQBundleNamed:@"style_default_edit_button_cancel_bg"];
// 设置按钮的属性
[_cancelButton setBackgroundColor:[UIColor yellowColor]];
[_cancelButton setTitle:(LSQString(@"修改此处", @"更改按钮")) forState:UIControlStateNormal];
// 创建导航栏完成按钮
_doneButton = [UIButton buttonWithFrame:CGRectMake(self.getSizeWidth-70, 0, 100, 100)
backgroundImageLSQBundleNamed:@"style_default_edit_button_confirm_bg"];
// 设置按钮的属性
[_doneButton setBackgroundColor:[UIColor yellowColor]];
[_doneButton setTitle:(LSQString(@"修改此处", @"更改按钮")) forState:UIControlStateNormal];
// 将按钮添加至视图
[self addSubview:_cancelButton];
[self addSubview:_doneButton];
}
替换导航栏两侧按钮点击事件,需要继承 TuSDKPFEditMultipleController
类
@interface SimpleEditMultipleController : TuSDKPFEditMultipleController
@end
在照片美化组件进行启动的时候对子类进行指定启动
_photoEditMultipleComponent.options.editMultipleOptions.componentClazz = [SimpleEditMultipleController class];
在子类中重写 loadView
方法重写需求,更改导航栏的相关属性
-(void)loadView;
{
// !!!!!!!!!!!
// 初始化父类的方法,这里很重要
[super loadView];
//可在此直接对导航栏进行设置,例如导航栏两侧按钮的显示或隐藏
}
替换两侧导航栏按钮点击事件
/**
* 配置默认样式视图
*
* @param view 默认样式视图 (如需创建自定义视图,请覆盖该方法,并配置自己的视图类)
*/
- (void)configDefaultStyleView:(TuSDKPFEditMultipleView *)view;
{
if (!view) return;
// !!!!!!!!!!!
// 初始化视图,这里很重要
[view initView];
// 绑定功能模块
[view.optionBar bindModules:self.modules target:self action:@selector(onEditWithAction:)];
// 是否禁用操作步骤记录
view.stepView.hidden = self.disableStepsSave;
// 步骤后退按钮
[view.stepView.prevButton addTouchUpInsideTarget:self action:@selector(onStepPreviewAction)];
// 步骤前进按钮
[view.stepView.nextButton addTouchUpInsideTarget:self action:@selector(onStepNextAction)];
// 修改这里 !!!!!!!!!!!
// 更改导航左侧按钮点击事件
[view.cancelButton addTouchUpInsideTarget:self action:@selector(leftTest)];
// 更改导航右侧按钮点击事件
[view.doneButton addTouchUpInsideTarget:self action:@selector(rightText)];
//
[view needUpdateLayout];
[self.view addSubview:view];
}
// 导航左侧按钮点击事件方法
-(void)leftTest
{
NSLog(@"测试成功");
}
// 导航右侧按钮点击事件
-(void)rightText
{
NSLog(@"测试成功");
}
替换导航栏两侧按钮点击事件,需要继承 TuSDKPFEditMultipleController
类
@interface SimpleEditMultipleController : TuSDKPFEditMultipleController
@end
在照片美化组件进行启动的时候对子类进行指定启动
_photoEditMultipleComponent.options.editMultipleOptions.componentClazz = [SimpleEditMultipleController class];
截断两侧导航栏按钮点击事件
@implementation SimpleEditMultipleController
{
UIButton *newBackButton;
UIButton *newCompleteButton;
UIButton *fakeCancelButton;
UIButton *fakeDoneButton;
}
- (void)configDefaultStyleView:(TuSDKPFEditMultipleView *)view;
{
// 执行父类方法
[super configDefaultStyleView:view];
// 隐藏原有的「取消」和「完成」button
view.cancelButton.hidden = YES;
view.doneButton.hidden = YES;
// 自定义新的「取消」和「完成」button
newBackButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
[newBackButton setBackgroundColor:[UIColor greenColor]];
[newBackButton addTouchUpInsideTarget:self action:@selector(newBackAction)];
[view addSubview:newBackButton];
newCompleteButton = [[UIButton alloc]initWithFrame:CGRectMake(view.frame.size.width *2/3, 0, 100, 100)];
[newCompleteButton setBackgroundColor:[UIColor redColor]];
[newCompleteButton addTouchUpInsideTarget:self action:@selector(newCompleteAction)];
[view addSubview:newCompleteButton];
fakeCancelButton = view.cancelButton;
fakeDoneButton = view.doneButton;
}
// 自定义新的「取消」button 的点击事件的方法
-(void)newBackAction;
{
// 执行自定义的逻辑
NSLog(@"执行了自定义的逻辑");
// 通过传递点击事件的方式,调用 SDK 原有 button 的点击事件
[fakeCancelButton sendActionsForControlEvents:UIControlEventTouchUpInside];
}
// 自定义新的「完成」button 的点击事件的方法
-(void)newCompleteAction;
{
// 执行自定义的逻辑
NSLog(@"我点了完成键");
// 通过传递点击事件的方式,调用 SDK 原有 button 的点击事件
[fakeDoneButton sendActionsForControlEvents:UIControlEventTouchUpInside];
}
@end