一、环境准备
·Xcode 9.0+。
·iOS 9.0 以上的 iPhone 或者 iPad 真机。
·项目已配置有效的开发者签名。
二、申请 License
参见 License 申请 的指引申请 License 后,从 腾讯云视立方控制台 复制 License Key 和 License URL:
三、初始化 UIKit
以下是集成 UIKit 的步骤。
四、手动集成方式
1. 下载获得 TAVMagicUIKit SDK,解压后你将得到 TAVMagicUIKit.framework(SDK) 、TAVMagicUIKit.bundle(UIKIT 界面需要的 icon 切图)。
2. 将 TAVMagicUIKit SDK 中的 TAVMagicUIKit.framework 和 TAVMagicUIKit.bundle 添加进工程目录。
3. 需要注意的是 UIKit 需要依赖 TAVMagic SDK,所以你还需要集成 TAVMagic SDK。你可以选择 CocoaPods 集成或者手动集成,具体步骤参考 TAVMagicSDK 集成文档。
五、Pod 集成方式
目前 TAVMagicUIKit 支持 Pods 渠道方式进行集成,集成 Pods 方法如下:
1. 在 Podfile 中添加如下依赖项:
pod 'TAVMagicUIKit', :podspec => "https://mediacloud-76607.gzc.vod.tencent-cloud.com/TAVMagic/iOS/Release/latest/TAVMagicUIKit.podspec"# TAVMagicUIKit依赖 TencentEffect_Edit美颜库 & TAVMagic核心SDK pod 'TencentEffect_Edit', :podspec => 'https://mediacloud-76607.gzc.vod.tencent-cloud.com/TencentEffect/iOS/edit/4.1.0.5/TencentEffect_Edit.podspec'pod 'TAVMagic',:podspec => 'https://mediacloud-76607.gzc.vod.tencent-cloud.com/TAVMagic/iOS/Release/latest/TAVMagic.podspec'
2. 在 Podfile 目录下执行 pod install 安装依赖。
六、2. 将特效素材资源拷贝到工程
如果需要使用和 Demo 一样的素材资源(贴纸、滤镜、特效、音乐、模板),可以从 TAVMagicUIKitSample 中将素材资源包 resource 拷贝拖入到 app 项目工程中。
七、3. 设置 License 鉴权
你可以根据业务需求,在相关模块的初始化代码中设置 URL 和 KEY。设置 License 后将立即触发下载。建议在应用初始化时完成设置,以避免实际使用时临时下载对性能造成影响。
//如果仅仅是为了触发下载或更新license,而不关心鉴权结果,则第4个参数传入null。[TELicenseCheck setTELicense:<#licenseUrl#> key:<#licenseKey#> completion:^(NSInteger authresult, NSString * _Nonnull errorMsg) { if (authresult == TELicenseCheckOk) { //鉴权成功 } else { //鉴权失败 }}];
八、4. TAVMagicUIKIT 组件
TAVMagicUIKit 是一套高级编辑界面的 UI 组件库,内部依赖 TAVMagic SDK。对外提供:
·TAVMagicUIKitBase:统一配置入口(初始化、资源提供者、拦截器、埋点、时长限制、控制器工厂)。
·TAVAlbumPickerController:相册选择器。
·TAVEditorPreviewController:预览/剪辑页容器。
·TAVDraftViewController:草稿箱页。
·TAVTemplateEditController:剪同款(模板)编辑页。
·TAVRecorderController:录制页。
·TAVCoverSelectorController:封面选择器。
九、初始化 UIKit
#import <TAVMagicUIKit/TAVMagicUIKitBase.h>- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1. License 鉴权(详见「剪同款集成指引 > 快速接入 > iOS(不含 UI)」) [TELicenseCheck setTELicense:@"<#License URL#>" key:@"<#License KEY#>" completion:^(NSInteger authresult, NSString *errorMsg) { NSLog(@"authResult : %zd msg:%@", authresult, errorMsg); }]; // 2. 初始化 UIKit,内部会自动调用 [TAVMagicBase initSDK:] // assetPath 传 nil 时默认从 mainBundle 获取 LightCore.bundle NSString *assetsPath = [[NSBundle mainBundle] pathForResource:@"LightCore" ofType:@"bundle"]; BOOL ret = [TAVMagicUIKitBase initUIKit:assetsPath]; // 3. 可选配置 [TAVMagicUIKitBase setMinimumEditableDuration:3.0]; // 编辑最小时长,默认 6s [TAVMagicUIKitBase setMaximumEditableDuration:60*60]; // 编辑最大时长,默认 60*60s return ret;}
十、相册选择器
1. 弹出相册选择器:
#import <TAVMagicUIKit/TAVAlbumPickerController.h>#import <TAVMagicUIKit/TAVAlbumAuthorizer.h>#import <TAVMagicUIKit/TAVAlbumPickerFactory.h> // 申请相册权限[TAVAlbumAuthorizer checkAlbumAuthorize:^(PHAuthorizationStatus status) { // 弹出相册选择器 [self showPickerVC];}];// 弹出相册选择器- (void)showPickerVC{ TAVAlbumPickerOptions *options = [TAVAlbumPickerFactory defaultAlbumPickerOptions]; TAVAlbumPickerController *pickerController = [[TAVAlbumPickerController alloc] initWithOptions:options]; pickerController.modalPresentationStyle = UIModalPresentationFullScreen; pickerController.pickerDelegate = self; [self presentViewController:pickerController animated:YES completion:nil];}
2. 监听相册选择器回调:
#pragma mark – TAVAlbumPickerControllerDelegate- (void)albumPickerController:(TAVAlbumPickerController *)pickerController didFinishPickingAlbumAssets:(NSArray<TAVAlbumAsset*> *)albumAssets{ // 获取albumAssets资源的路径,添加进TAVMagic SDK dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSMutableArray *resources = [NSMutableArray array]; for (TAVAlbumAsset *mediaItem in albumAssets) { TAVAlbumResource *resource; if (mediaItem.mediaType == TAVAlbumAssetTypeVideo) { resource = [self videoResourceWithPHAsset:mediaItem.asset]; } else if (mediaItem.mediaType == TAVAlbumAssetTypeImage) { resource = [self imageResourceWithPHAsset:mediaItem.asset]; } else { } [resources addObject:resource]; } dispatch_async(dispatch_get_main_queue(), ^{ [self gotoPreviewControllerWithResource:resources]; [pickerController dismissViewControllerAnimated:YES completion:nil]; }); });}
3.自定义相册选择器界面:
相册选择器支持自定义相册展示内绝大部分元素,包含展示视频/图片类型、UI元素自定义、最大最小选取数等。可参考TAVAlbumPickerOptions和TAVAlbumPickerCustomViewOptions- (TAVAlbumPickerOptions *)albumOptionsForEditor { TAVAlbumPickerOptions *options = [TAVAlbumPickerFactory defaultAlbumPickerOptions]; options.autoDismiss = NO; options.mediaType = TAVAlbumAssetTypeAll; int minAssetCount = 1; int maxAssetCount = 9; options.minimumSelectionCount = minAssetCount; options.maximumSelectionCount = maxAssetCount; options.customViewOptions.albumAssetCollectionViewCellClass = TAVAlbumAssetCustomCollectionViewCell.class; options.customViewOptions.albumPreviewViewControlleClass = TAVAlbumCustomPreviewViewController.class; options.customViewOptions.albumAssetNavigationViewClass = TAVTemplateAlbumNavigationView.class; options.customViewOptions.albumAssetCollectionViewCellClass = TAVTemplateAlbumAssetCell.class; options.pattern = TAVAlbumPatternRepeatedSelection; options.customData = templateConfig; options.customViewOptions.albumAssetSelectorViewClass = TAVAlbumPlaceholderAssetSelectorView.class; options.assetSelectorViewTips = [NSString stringWithFormat:@"请选择%d个照片/视频", maxAssetCount]; return options;}
十一、跳转到编辑页面
#import <TAVMagicUIKit/TAVMagicUIKitBase.h>#import <TAVMagicUIKit/TAVEditorPreviewController.h>#import <TAVMagicUIKit/TAVAlbumResource.h>// 方式一:使用素材路径数组初始化NSArray<TAVAlbumResource *> *resources = ….// 从相册拿到的素材数组TAVEditorPreviewController *previewVC = [TAVMagicUIKitBase createPreviewControllerWithResources:resources];// 方式二:使用草稿初始化// TAVEditorPreviewController *previewVC = [TAVMagicUIKitBase createPreviewControllerWithDraft:draft];// 方式三:使用已有的 TAVEditor 实例初始化// TAVEditorPreviewController *previewVC = [TAVMagicUIKitBase createPreviewControllerWithEditor:editor];previewVC.nextClickCallback = ^{ // 点击「下一步」的回调,可在此处接管导出/发布流程};[self.navigationController pushViewController:previewVC animated:YES];
十二、跳转到录制页
#import <TAVMagicUIKit/TAVMagicUIKitBase.h>#import <TAVMagicUIKit/TAVRecorderController.h>#import <TAVMagicUIKit/TAVRecorderSessionDelegate.h>TAVRecorderController *recorderVC = [TAVMagicUIKitBase createRecorderController];recorderVC.sessionDelegate = self;[self.navigationController pushViewController:recorderVC animated:YES];
十三、自定义 UIKIT 主题色与切图替换
// 设置颜色TAVThemeConfig *themeConfig = [TAVCustomUIManager shareInstance].themeConfig;themeConfig.brandColor = [UIColor tvc_colorWithHexString:@"#4BEF65"];// 渐变按钮(导出 / 下一步)走品牌渐变,不配置时会降级为 brandColor 纯色themeConfig.brandGradient = [TAVGradientConfig configWithColors:@[ [UIColor tvc_colorWithHexString:@"#DCFC73"], [UIColor tvc_colorWithHexString:@"#7BF38E"], [UIColor tvc_colorWithHexString:@"#74ECEE"],]];// 注册自定义bundle,bundle内同名的切图资源会覆盖TAVMagicUIKit.bundle内原有切图[[TAVBdManager sharedInstance] registerBundle:@"customTheme"];