iOS

最近更新时间:2026-01-13 17:29:51

我的收藏

功能概览

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