功能概览
TAVWidgetContentView 是所有挂件(贴纸、画中画等组件,后文全部统称挂件)手势操作的视图,挂件选中、取消选中、拖动、拖移位置拦截、旋转角度拦截等操作都可以在该类中进行。
相关接口类
接口类名 | 描述 |
TAVEditor | SDK 操作入口类。 |
SDK 手势操作封装基类。 |
目前已有两种内置的基础编辑视图,可以直接挂载在 TAVWidgetContentView 中使用:
画中画基础编辑视图:TAVPipView
贴纸基础编辑视图:TAVStickerView
挂件边框和操作按钮都在相应的 EditView 进行绘制,可以通过继承相应的 EditView 对不同挂件绘制不同的编辑框。
主要代理协议
接口名 | 描述 |
代理是否响应贴纸和画中画的点击。 | |
代理贴纸编辑视图的操作响应。 | |
创建自定义挂件编辑视图的工厂。 |
TAVWidgetContentViewDelegate
名称 | 描述 |
contentView:shouldTouchSticker: | 询问代理,贴纸是否允许响应触摸。 |
contentView:ShouldTouchPipItem: | 询问代理,画中画是否允许响应触摸。 |
TAVStickerViewDelegate
名称 | 描述 |
stickerViewDidReachToEnd: | 通知代理,贴纸是否已经播放结束。 |
stickerView:shouldHideAtTime: | 询问代理,贴纸在当前时间是否隐藏。 |
stickerViewStartPanning: | 通知代理,贴纸 start panning。 |
stickerViewChangePanning: | 通知代理,贴纸正在 change panning。 |
stickerViewEndPanning: | 通知代理,贴纸 end panning。 |
stickerViewOnDelete: | 通知代理,贴纸被删除。 |
stickerViewOnClicked: | 通知代理,贴纸被点击。 |
TAVPipViewDelegate
名称 | 描述 |
pipView:shouldHideAtTime: | 询问代理,画中画在当前时间是否隐藏。 |
pipViewStartPanning: | 通知代理,画中画 start panning。 |
pipViewChangePanning: | 通知代理,画中画正在 change panning。 |
pipViewEndPanning: | 通知代理,画中画 end panning。 |
pipViewOnDelete: | 通知代理,画中画被删除。 |
pipViewOnClicked: | 通知代理,画中画被点击。 |
TAVWidgetContentView
名称 | 描述 |
activeView | 正在被激活的视图。 |
isNoFocusGestureEnabled | 设置是否可以直接拖动挂件,无需先选中挂件。 |
registerDelegate: | 注册代理。 |
unregisterDelegate: | 取消代理。 |
filterStickerWithPoint: | 返回点击处的所有合法贴纸(sticker)。 |
filterPipItemWithPoint: | 返回点击处的所有合法画中画(PipItem)。 |
自定义视图
通过继承已有的 TAVWidgetContentView/TAVPipView/TAVStickerView 来扩展视图功能。
自定义 TAVWidgetContentView 示例
// 继承扩展TAVWidgetContentView@interface MYWidgetContentView : TAVWidgetContentView@property (nonatomic, weak) TAVEditor *editor;@end@implementation TAVMagicWidgetContentView- (instancetype)initWithFrame:(CGRect)frame{self = [super initWithFrame:frame];if (self) {[self setupUI];}return self;}- (void)setupUI {// 自定义UI}@end
自定义 StickerView 示例
// 继承扩展TAVStickerView@interface MyStickerView : TAVStickerView// 添加一个编辑按钮@property (nonatomic, strong, readonly) UIButton *editButton;@end@implementation TAVMagicStickerView- (instancetype)initWithFrame:(CGRect)frame{self = [super initWithFrame:frame];if (self) {[self setupUI];}return self;}- (void)setupUI{_editButton = [UIButton buttonWithType:UIButtonTypeCustom];_editButton.imageView.contentMode = UIViewContentModeScaleAspectFit;[_editButton setImage:[UIImage imageWithName:@"icon_pip_edit"] forState:UIControlStateNormal];[_editButton addTarget:self action:@selector(didClickEditItem) forControlEvents:UIControlEventTouchUpInside];[self addSubview:_editButton];}// 重写接口 自定义实现拖动view时隐藏按钮- (void)handlePanRecognizer:(UIPanGestureRecognizer *)recognizer {[super handlePanRecognizer:recognizer];[self handleRecognizer:recognizer];}- (void)handleRecognizer:(UIGestureRecognizer *)recognizer {switch (recognizer.state) {case UIGestureRecognizerStateBegan:self.editButtom.hidden = YES;break;case UIGestureRecognizerStateChanged:self.editButtom.hidden = YES;break;case UIGestureRecognizerStateCancelled:case UIGestureRecognizerStateEnded:case UIGestureRecognizerStateFailed:{self.editButtom.hidden = NO;break;}default:break;}}@end