短视频 SDK iOS(手势操作)

TAVWidgetContentView 是所有挂件(贴纸、画中画等组件,后文全部统称挂件)手势操作的容器视图。挂件的选中、取消选中、拖动等手势都在该视图中处理。

相关产品
短视频 SDK 产品页,含版本规格、价格与购买入口。

一、功能概览

将 TAVWidgetContentView 通过 TAVPreviewParam.widgetContentView 传入编辑器,即可替换默认的手势层实现:

TAVPreviewParam *param = [[TAVPreviewParam alloc] init];param.videoView = self.previewContainerView;// 传入自定义的挂件手势容器视图param.widgetContentView = myWidgetContentView;[editor setPreview:param];

注意:说明:

注意:不设置时使用 SDK 默认实现。

二、相关接口类

接口类名 描述
TAVEditor SDK 操作入口类。
TAVPreviewParam 预览参数,通过 widgetContentView 注入手势层。
TAVWidgetContentView SDK 手势操作封装基类(UIView 子类)。
TAVWidgetContentViewDelegate 挂件是否响应触摸的询问代理。
TAVStickerView 贴纸视图(挂件编辑视图基类)。
TAVStickerViewDelegate 贴纸视图手势事件代理。
TAVPipView 画中画视图(挂件编辑视图基类)。

三、主要接口介绍

接口名 描述
TAVWidgetContentViewDelegate 决定某个挂件是否响应触摸(shouldTouchSticker: / shouldTouchPipItem:)。
TAVStickerViewDelegate 贴纸手势事件回调(开始拖动、拖动中、结束拖动、点击、删除等)。

四、属性

属性 类型 说明
currentContext TAVStickerContext *(weak) 当前贴纸上下文。
editor TAVEditor *(weak) 绑定的编辑器。
activeView TAVEditableView *(weak) 当前激活的挂件视图。
isNoFocusGestureEnabled BOOL 是否无需选中即可手势交互,默认 NO(需先点击选中才能移动缩放)。
outerResponseWidget BOOL 区域外是否支持移动/缩放/旋转,响应范围扩大到 superView,默认 NO。

五、方法

方法 说明
removeAllStickers 移除所有贴纸。
removeAllPips 移除所有画中画。
shouldTouchSticker: 查询指定贴纸是否响应触摸。
shouldTouchPip: 查询指定画中画是否响应触摸。
filterStickerWithPoint: 按触摸点筛选命中的贴纸。
filterPipItemWithPoint: 按触摸点筛选命中的画中画。
registerDelegate: / unregisterDelegate: 注册/注销 TAVWidgetContentViewDelegate。
handlePanRecognizer: 处理拖动手势(可供外部转发手势事件)。

六、自定义挂件手势层

1. 继承 TAVWidgetContentView 并实现自己的逻辑。

@interface MyWidgetContentView : TAVWidgetContentView @end @implementation MyWidgetContentView – (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // 无需选中即可直接拖动挂件 self.isNoFocusGestureEnabled = YES; // 允许在挂件区域外继续响应手势 self.outerResponseWidget = YES; } return self; } @end

2. 在 setPreview: 时通过 TAVPreviewParam 传入。

TAVPreviewParam *param = [[TAVPreviewParam alloc] init]; param.videoView = self.previewContainerView; param.widgetContentView = [[MyWidgetContentView alloc] initWithFrame:self.previewContainerView.bounds]; [editor setPreview:param];

七、控制挂件是否响应触摸

#pragma mark – TAVWidgetContentViewDelegate<!– list-type-break –>- (BOOL)contentView:(TAVWidgetContentView *)contentView shouldTouchSticker:(TAVSticker *)sticker { // 返回 NO 表示该贴纸不响应手势 return YES;}- (BOOL)contentView:(TAVWidgetContentView *)contentView shouldTouchPipItem:(TAVMediaPipItem *)pipItem { return YES;}// 注册[widgetContentView registerDelegate:self];// 注销[widgetContentView unregisterDelegate:self];

八、监听贴纸手势事件

@protocol TAVStickerViewDelegate <NSObject>@optional- (void)stickerViewDidReachToEnd:(TAVStickerView *)stickerView; // 贴纸播放到结尾- (BOOL)stickerView:(TAVStickerView *)stickerView …; // 是否允许某操作- (void)stickerViewStartPanning:(TAVStickerView *)stickerView; // 开始拖动- (void)stickerViewChangePanning:(TAVStickerView *)stickerView; // 拖动中- (void)stickerViewEndPanning:(TAVStickerView *)stickerView; // 拖动结束- (void)stickerViewOnDelete:(TAVStickerView *)stickerView; // 删除- (void)stickerViewOnClicked:(TAVStickerView *)stickerView; // 点击@end

TAVStickerView *stickerView = [stickerManager fetchStickerViewWithItem:stickerItem];stickerView.delegate = self;

九、TAVStickerView 常用能力

属性/方法 说明
stickerItem / sticker 关联的贴纸数据模型。
delegate 手势事件代理。
borderView / contentView / animationView 边框视图、内容视图、动画视图。
borderColor / borderWidth 边框颜色与宽度(可自定义编辑框外观)。
mode / switchMode: 贴纸模式与切换。
disableGestureWhenInactive 非活跃状态下是否禁止手势,默认 YES。
becomeActive / resignActive 激活 / 取消激活。
alignmentMode / alignmentEdgeInset 对齐模式与对齐边距(可实现居中辅助线)。
mirrored 是否镜像。
repeatCount / shouldRepeat 动效循环次数与是否循环。
seekToTime: / updateProgress: / play / pause / replay 动效播放控制。
reloadData / reloadSticker: / updateScaleRect 刷新数据。
赞 (0)
上一篇 4天前
下一篇 4天前