| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300 |
- //
- // VideoEditViewController.m
- // TCLVBIMDemo
- //
- // Created by xiang zhang on 2017/4/10.
- // Copyright © 2017年 tencent. All rights reserved.
- //
- #import "TCVideoEditViewController.h"
- #import "TCBGMListViewController.h"
- #import "SDKHeader.h"
- #import <MediaPlayer/MPMediaPickerController.h>
- #import "VideoPreview.h"
- #import "VideoRangeSlider.h"
- #import "VideoRangeConst.h"
- #import "TCVideoRecordMusicView.h"
- #import "UIView+Additions.h"
- #import "ColorMacro.h"
- #import "MBProgressHUD.h"
- #import "BottomTabBar.h"
- #import "VideoCutView.h"
- #import "PasterAddView.h"
- #import "EffectSelectView.h"
- #import "VideoPasterView.h"
- #import "VideoTextFiled.h"
- #import "TCBGMHelper.h"
- #import "TXUGCPublish.h"
- #import "TCUserInfoModel.h"
- #import "VideoInfo.h"
- //#import "TCLoginModel.h"
- #import "TCLiveListModel.h"
- #import "TCUserAgreementController.h"
- #import "UIActionSheet+BlocksKit.h"
- #import "UIAlertView+BlocksKit.h"
- #import <AFNetworking.h>
- #import <AssetsLibrary/AssetsLibrary.h>
- #import "TXCVEFColorPalette.h"
- //#import "Submit_download_resources.h"
- #import "new_BGMListController.h"
- #define hasAgreeUserAgreement @"_hasAgreeUserAgreement_"
- typedef NS_ENUM(NSInteger,ActionType)
- {
- ActionType_Save,
- ActionType_Publish,
- ActionType_Save_Publish,
- };
- typedef NS_ENUM(NSInteger,TimeType)
- {
- TimeType_Clear,
- TimeType_Back,
- TimeType_Repeat,
- TimeType_Speed,
- };
- typedef NS_ENUM(NSInteger,EffectSelectType)
- {
- EffectSelectType_Effect,
- EffectSelectType_Time,
- EffectSelectType_Filter,
- EffectSelectType_Paster,
- EffectSelectType_Text,
- };
- typedef NS_ENUM(NSInteger,TCLVFilterType) {
- FilterType_None = 0,
- FilterType_biaozhun , //标准滤镜
- FilterType_yinghong , //樱红滤镜
- FilterType_yunshang , //云裳滤镜
- FilterType_chunzhen , //纯真滤镜
- FilterType_bailan , //白兰滤镜
- FilterType_yuanqi , //元气滤镜
- FilterType_chaotuo , //超脱滤镜
- FilterType_xiangfen , //香氛滤镜
- FilterType_white , //美白滤镜
- FilterType_langman , //浪漫滤镜
- FilterType_qingxin , //清新滤镜
- FilterType_weimei , //唯美滤镜
- FilterType_fennen , //粉嫩滤镜
- FilterType_huaijiu , //怀旧滤镜
- FilterType_landiao , //蓝调滤镜
- FilterType_qingliang , //清凉滤镜
- FilterType_rixi , //日系滤镜
- };
- @interface TCVideoEditViewController ()<TXVideoGenerateListener,VideoPreviewDelegate, BottomTabBarDelegate, VideoCutViewDelegate,EffectSelectViewDelegate, PasterAddViewDelegate, VideoPasterViewDelegate ,VideoTextFieldDelegate ,TXVideoPublishListener,TCBGMControllerListener,VideoRecordMusicViewDelegate,UIActionSheetDelegate, UITabBarDelegate , UIPickerViewDelegate ,UIPickerViewDelegate ,UIAlertViewDelegate,OssUploadImageDelegate>
- @property (nonatomic, strong)BGOssManager *ossmanger;
- @end
- @implementation TCVideoEditViewController
- {
- TCBGMListViewController *_bgmListVC;
- TXVideoEditer* _ugcEdit; //sdk编辑器
- VideoPreview* _videoPreview; //视频预览
-
- //特效View
- UIView* _effectView;
-
- //cover view
- UIImageView* _coverImageView;
-
- //背景音
- TCVideoRecordMusicView *_musicView;
-
- //特效确定btn
- UIButton * _effectConfirmBtn;
-
- UIButton * _generateCannelBtn;
-
- //生成时的进度浮层
- UIView* _generationView;
- UIProgressView* _generateProgressView;
- UILabel* _generationTitleLabel;
- UILabel* _timeLabel;
- UIButton* _deleteBtn;
- UIButton* _playBtn;
- //pulish
- TXUGCPublish* _videoPublish;
-
- BottomTabBar* _bottomBar; //底部栏
- VideoCutView* _videoCutView; //裁剪
- PasterAddView* _pasterAddView; //贴图
- EffectSelectView* _effectSelectView; //动效选择
- EffectSelectType _effectSelectType;
-
- ActionType _actionType;
- TimeType _timeType;
-
- NSMutableArray <EffectInfo *> *_pasterEffectArray;
- NSMutableArray <EffectInfo *> *_textEffectArray;
- NSMutableArray <VideoPasterInfo *>* _videoPasterInfoList;
- NSMutableArray <VideoTextInfo *>* _videoTextInfoList;
- NSMutableArray *_cutPathList;
-
- //裁剪时间
- CGFloat _duration;
- CGFloat _playTime;
- CGFloat _BGMDuration;
- CGFloat _BGMVolume;
- CGFloat _videoVolume;
- NSInteger _effectSelectIndex;
- NSInteger _effectType;
- NSObject* _BGMPath;
- NSString* _videoOutputPath;
- BOOL _isReverse;
- BOOL _isSeek;
- BOOL _isPlay;
- BOOL _navigationBarHidden;
- dispatch_queue_t _imageLoadingQueue;
- NSArray<EffectInfo*> *_effectList;
-
- // 选中的滤镜与速度,用于恢复状态
- NSInteger _filterIndex;
- NSInteger _timeIndex;
-
- MBProgressHUD *_hud;
-
- VideoDynamicViewC *_videoDynamicViewC;
- }
- -(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- _effectType = -1;
- _cutPathList = [NSMutableArray array];
- _videoOutputPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"outputCut.mp4"];
-
- _pasterEffectArray = [NSMutableArray array];
- [_pasterEffectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"Common.AddNew", nil);
- v.icon = [UIImage imageNamed:@"addPaster_normal"];
- v;
- })];
-
- _textEffectArray = [NSMutableArray array];
- [_textEffectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"Common.AddNew", nil);
- v.icon = [UIImage imageNamed:@"addPaster_normal"];
- v;
- })];
-
- _videoPasterInfoList = [NSMutableArray array];
- _videoTextInfoList = [NSMutableArray array];
- _BGMVolume = 1.0;
- _videoVolume = 1.0;
- _imageLoadingQueue = dispatch_queue_create("TCVideoEditImageLoading", DISPATCH_QUEUE_CONCURRENT);
- }
- return self;
- }
- - (void)viewWillAppear:(BOOL)animated
- {
- [super viewWillAppear:animated];
- // _navigationBarHidden = self.navigationController.navigationBar.hidden;
- self.navigationController.navigationBar.translucent = NO;
- // self.navigationController.navigationBar.hidden = YES;
- // self.navigationController.navigationBar.hidden = NO;
- [[UIApplication sharedApplication]setStatusBarHidden:YES];
- if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]){
- self.navigationController.interactivePopGestureRecognizer.enabled = NO;
- }
- [self ossmanger];
- }
- - (void)viewWillDisappear:(BOOL)animated
- {
- [super viewWillDisappear:animated];
- self.navigationController.navigationBar.hidden = NO;
- self.navigationController.navigationBarHidden = NO;
- // _navigationBarHidden;
- [[UIApplication sharedApplication]setStatusBarHidden:NO];
- [_videoCutView stopGetImageList];
- }
- - (void)viewDidAppear:(BOOL)animated
- {
- [super viewDidAppear:animated];
- if (!_videoPreview.isPlaying) {
- [_videoPreview playVideo];
- }
- // [self showVideoDynamicViewC];
- }
- - (void)onVideoEnterBackground
- {
- if (_generationView && !_generationView.hidden) {
- [_ugcEdit pauseGenerate];
- }else{
- [MBProgressHUD hideHUDForView:self.view animated:YES];
- [_ugcEdit pausePlay];
- [self setPlayBtn:NO];
- }
- }
- - (void)onVideoWillEnterForeground
- {
- if (_generationView && !_generationView.hidden) {
- [_ugcEdit resumeGenerate];
- }else{
- [_ugcEdit resumePlay];
- [self setPlayBtn:YES];
- }
- }
- - (void)presetTonew_bgmList
- {
- __block typeof(self)blockself =self;
- [[TXUGCRecord shareInstance] pauseBGM];
- new_BGMListController *bgmvc =[new_BGMListController new];
-
- new_bgmNavController *nv = [[new_bgmNavController alloc] initWithRootViewController:bgmvc];
- bgmvc.nav =nv;
- nv.useMusicBlock = ^(music_obj *model) {
- if (model)
- {
- blockself.element =model;
- [blockself onBGMControllerPlay:model.music_url];
- }
- };
- nv.modalPresentationStyle = UIModalPresentationFullScreen;
- [self presentViewController:nv animated:YES completion:nil];
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- __weak __typeof(self) wself = self;
- dispatch_async(_imageLoadingQueue, ^{
- CFTimeInterval start = CFAbsoluteTimeGetCurrent();
- EffectInfo *(^CreateEffect)(NSString *name, NSString *animPrefix)=^(NSString *name, NSString *animPrefix){
- EffectInfo * v= [EffectInfo new];
- v.name = name;
- v.animateIcons = [NSMutableArray array];
- // NSString *imageName = [NSString stringWithFormat: @"%@_select", animPrefix];
- // NSString *path = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];
- // v.selectIcon = [UIImage imageWithContentsOfFile:path];
- for (int i = 0; i < 24; i ++) {
- NSString *imageName = [NSString stringWithFormat: @"%@%d", animPrefix, i];
- NSString *path = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];
- if (path == nil) {
- break;
- }
- [v.animateIcons addObject:[UIImage imageWithContentsOfFile:path]];
- }
- return v;
- };
- NSArray <EffectInfo *> *effectList = @[ CreateEffect(NSLocalizedString(@"TCVideoEditView.DynamicLightWave", nil), @"donggan"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.DarkFantasy", nil), @"anhei"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.SoulOut", nil), @"linghun"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.ScreenSplit", nil), @"fenlie"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.Shutter", nil), @"shutter-"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.GhostShadow", nil), @"ghostshadow-"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.Phantom", nil), @"phantom-"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.Ghost", nil), @"ghost-"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.Lightning", nil), @"lightning-"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.Mirror", nil), @"mirror-"),
- CreateEffect(NSLocalizedString(@"TCVideoEditView.Illusion", nil), @"illusion-"),
- ];
- __strong __typeof(wself) self = wself;
- if (self) {
- self->_effectList = effectList;
- }
- CFTimeInterval end = CFAbsoluteTimeGetCurrent();
- NSLog(@"effect load time: %g", end - start);
- });
- if (_videoAsset == nil && _videoPath != nil) {
- NSURL *avUrl = [NSURL fileURLWithPath:_videoPath];
- _videoAsset = [AVAsset assetWithURL:avUrl];
- }
- self.view.backgroundColor = UIColor.blackColor;
-
- _videoPreview = [[VideoPreview alloc] initWithFrame:self.view.bounds coverImage:nil];
- _videoPreview.delegate = self;
- [_videoPreview setPlayBtnHidden:YES];
- [self.view addSubview:_videoPreview];
- //点击选中文字
- UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
- [_videoPreview addGestureRecognizer:singleTap];
- CGFloat offset = 0;
- if (@available(iOS 11, *)) {
- offset = [UIApplication sharedApplication].keyWindow.safeAreaInsets.bottom;
- }
- _bottomBar = [[BottomTabBar alloc] initWithFrame:CGRectMake(0, self.view.height - 62 * kScaleY - offset, self.view.width, 40 * kScaleY)];
- _bottomBar.delegate = self;
- [self.view addSubview:_bottomBar];
- // 特效取消按钮
- UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [backBtn setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal];
- backBtn.frame = CGRectMake(10 * kScaleX, 10 * kScaleY, 50 * kScaleX, 44 * kScaleY);
- [backBtn addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:backBtn];
-
- CGFloat btnConfirmWidth = 70;
- CGFloat btnConfirmHeight = 30;
- _effectConfirmBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [_effectConfirmBtn setTitle:NSLocalizedString(@"Common.Done", nil) forState:UIControlStateNormal];
- _effectConfirmBtn.titleLabel.font = [UIFont systemFontOfSize:14];
- [_effectConfirmBtn setBackgroundImage:[UIImage imageNamed:@"next_normal"] forState:UIControlStateNormal];
- [_effectConfirmBtn setBackgroundImage:[UIImage imageNamed:@"next_press"] forState:UIControlStateHighlighted];
- _effectConfirmBtn.frame = CGRectMake(self.view.width - 15 * kScaleX - btnConfirmWidth, 20 * kScaleY, btnConfirmWidth, btnConfirmHeight);
- [_effectConfirmBtn addTarget:self action:@selector(goFinish) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:_effectConfirmBtn];
-
- _coverImageView = [[UIImageView alloc] initWithFrame:_videoPreview.frame];
- _coverImageView.hidden = YES;
- _coverImageView.contentMode = UIViewContentModeScaleAspectFit;
- [self.view addSubview:_coverImageView];
- // 特效容器
- _effectView= [[UIView alloc] initWithFrame:CGRectMake(0, self.view.height, self.view.width, 205 * kScaleY)];
- [self.view addSubview:_effectView];
-
- _timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(15 * kScaleX, 0, 40, 54)];
- _timeLabel.text = @"00:00";
- _timeLabel.font = [UIFont systemFontOfSize:14];
- _timeLabel.textColor = [UIColor whiteColor];
- [_effectView addSubview:_timeLabel];
-
- _playBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [_playBtn setBackgroundImage:[UIImage imageNamed:@"editPlay_normal"] forState:UIControlStateNormal];
- [_playBtn setBackgroundImage:[UIImage imageNamed:@"editPlay__press"] forState:UIControlStateHighlighted];
- _playBtn.frame = CGRectMake(self.view.width / 2 - 15, 10 * kScaleY, 30, 30);
- [_playBtn addTarget:self action:@selector(onPlayVideo) forControlEvents:UIControlEventTouchUpInside];
- [_effectView addSubview:_playBtn];
-
- _deleteBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [_deleteBtn setBackgroundImage:[UIImage imageNamed:@"effectDelete_normal"] forState:UIControlStateNormal];
- [_deleteBtn setBackgroundImage:[UIImage imageNamed:@"effectDelete_press"] forState:UIControlStateHighlighted];
- _deleteBtn.frame = CGRectMake(self.view.width - 15 * kScaleX - 30, 10 * kScaleY, 30, 30);
- [_deleteBtn addTarget:self action:@selector(onDeleteEffect) forControlEvents:UIControlEventTouchUpInside];
- [_effectView addSubview:_deleteBtn];
- CGFloat cutViewHeight = 34 * kScaleY;
- RangeContentConfig *config = [[RangeContentConfig alloc] init];
- config.pinWidth = PIN_WIDTH;
- config.thumbHeight = cutViewHeight;
- config.borderHeight = 0;
- config.imageCount = 20;
- _videoCutView = [[VideoCutView alloc] initWithFrame:CGRectMake(0,_timeLabel.bottom + 3, _effectView.width,cutViewHeight) videoPath:_videoPath videoAsset:_videoAsset config:config];
- _videoCutView.delegate = self;
- [_videoCutView setCenterPanHidden:YES];
- [_effectView addSubview:_videoCutView];
-
- UIImageView *flagView = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.width / 2 - 6, _timeLabel.bottom, 12, 48)];
- flagView.image = [UIImage imageNamed:@"videoSlider"];
- [_effectView addSubview:flagView];
-
- _effectSelectView = [[EffectSelectView alloc] initWithFrame:CGRectMake(0, _videoCutView.bottom + 24 * kScaleY,_effectView.width,70 * kScaleY)];
- _effectSelectView.delegate = self;
- _effectSelectView.hidden = NO;
- [_effectView addSubview:_effectSelectView];
-
- _pasterAddView = [[PasterAddView alloc] initWithFrame:CGRectMake(0,self.view.height - 205 * kScaleY, self.view.width,205 * kScaleY)];
- _pasterAddView.delegate = self;
- _pasterAddView.hidden = YES;
- [self.view addSubview:_pasterAddView];
-
- _musicView = [[TCVideoRecordMusicView alloc] initWithFrame:CGRectMake(0, self.view.bottom - 268 * kScaleY, self.view.width, 268 * kScaleY) needEffect:NO];
- _musicView.delegate = self;
- _musicView.hidden = YES;
- [self.view addSubview:_musicView];
-
- _bgmListVC = [[TCBGMListViewController alloc] init];
- [_bgmListVC setBGMControllerListener:self];
- [self initVideoEditor];
- [self initVideoPublish];
- }
- - (void)initVideoEditor
- {
- TXVideoInfo *videoMsg = [TXVideoInfoReader getVideoInfoWithAsset:_videoAsset];
- _duration = videoMsg.duration;
-
- TXPreviewParam *param = [[TXPreviewParam alloc] init];
- param.videoView = _videoPreview.renderView;
- param.renderMode = PREVIEW_RENDER_MODE_FILL_EDGE;
- _ugcEdit = [[TXVideoEditer alloc] initWithPreview:param];
- _ugcEdit.generateDelegate = self;
- _ugcEdit.previewDelegate = _videoPreview;
-
- //[_ugcEdit setVideoPath:_videoPath];
- [_ugcEdit setVideoAsset:_videoAsset];
- [_ugcEdit setRenderRotation:self.renderRotation];
- // UIImage *waterimage = [UIImage imageNamed:@"watermark"];
- // [_ugcEdit setWaterMark:waterimage normalizationFrame:CGRectMake(0.01, 0.01, 0.3 , 0)];
- UIImage *tailWaterimage = [UIImage imageNamed:@"tcloud_logo"];
- float w = 0.15;
- float x = (1.0 - w) / 2.0;
- float width = w * videoMsg.width;
- float height = width * tailWaterimage.size.height / tailWaterimage.size.width;
- float y = (videoMsg.height - height) / 2 / videoMsg.height;
- [_ugcEdit setTailWaterMark:tailWaterimage normalizationFrame:CGRectMake(x,y,w,0) duration:2];
- }
- - (void)initVideoPublish
- {
- _videoPublish = [[TXUGCPublish alloc] initWithUserID:[[TCUserInfoModel sharedInstance] getUserProfile].identifier];
- _videoPublish.delegate = self;
- }
- - (UIView*)generatingView
- {
- /*用作生成时的提示浮层*/
- if (!_generationView) {
- _generationView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, self.view.height + 64)];
- _generationView.backgroundColor = UIColor.blackColor;
- _generationView.alpha = 0.9f;
-
- _generateProgressView = [UIProgressView new];
- _generateProgressView.center = CGPointMake(_generationView.width / 2, _generationView.height / 2);
- _generateProgressView.bounds = CGRectMake(0, 0, 225, 20);
- _generateProgressView.progressTintColor = RGB(238, 100, 85);
- [_generateProgressView setTrackImage:[UIImage imageNamed:@"slide_bar_small"]];
- //_generateProgressView.trackTintColor = UIColor.whiteColor;
- //_generateProgressView.transform = CGAffineTransformMakeScale(1.0, 2.0);
-
- _generationTitleLabel = [UILabel new];
- _generationTitleLabel.font = [UIFont systemFontOfSize:14];
- _generationTitleLabel.text = NSLocalizedString(@"TCVideoCutView.VideoGenerating", nil);
- _generationTitleLabel.textColor = UIColor.whiteColor;
- _generationTitleLabel.textAlignment = NSTextAlignmentCenter;
- _generationTitleLabel.frame = CGRectMake(0, _generateProgressView.y - 34, _generationView.width, 14);
-
- _generateCannelBtn = [UIButton new];
- [_generateCannelBtn setImage:[UIImage imageNamed:@"cancel"] forState:UIControlStateNormal];
- _generateCannelBtn.frame = CGRectMake(_generateProgressView.right + 15, _generationTitleLabel.bottom + 10, 20, 20);
- [_generateCannelBtn addTarget:self action:@selector(onCancel:) forControlEvents:UIControlEventTouchUpInside];
-
- [_generationView addSubview:_generationTitleLabel];
- [_generationView addSubview:_generateProgressView];
- [_generationView addSubview:_generateCannelBtn];
- [[[UIApplication sharedApplication] delegate].window addSubview:_generationView];
- }
-
- _generateProgressView.progress = 0.f;
- return _generationView;
- }
- - (void)setRenderRotation:(int)renderRotation
- {
- _renderRotation = renderRotation;
- [_ugcEdit setRenderRotation: renderRotation];
- }
- -(void)onPlayVideo
- {
- if (_isPlay) {
- [_ugcEdit pausePlay];
- _isPlay = NO;
- }else{
- CGFloat currentPos = _videoCutView.videoRangeSlider.currentPos;
- if(_isReverse && currentPos != 0){
- [self startPlayFromTime:0 toTime:currentPos];
- }else{
- [self startPlayFromTime:currentPos toTime:_duration];
- }
- if (_effectSelectType == EffectSelectType_Paster) {
- [self removeAllPasterViewFromSuperView];
- [self setVideoPastersToSDK];
- }
- if (_effectSelectType == EffectSelectType_Text) {
- [self removeAllTextFieldFromSuperView];
- [self setVideoSubtitlesToSDK];
- }
- _isPlay = YES;
- }
- [self setPlayBtn:_isPlay];
- }
- - (void)setPlayBtn:(BOOL)isPlay
- {
- if (isPlay) {
- [_playBtn setBackgroundImage:[UIImage imageNamed:@"editPause_normal"] forState:UIControlStateNormal];
- [_playBtn setBackgroundImage:[UIImage imageNamed:@"editPause_press"] forState:UIControlStateHighlighted];
- }else{
- [_playBtn setBackgroundImage:[UIImage imageNamed:@"editPlay_normal"] forState:UIControlStateNormal];
- [_playBtn setBackgroundImage:[UIImage imageNamed:@"editPlay__press"] forState:UIControlStateHighlighted];
- }
- }
- - (void)onTap:(UITapGestureRecognizer*)recognizer
- {
- CGPoint tapPoint = [recognizer locationInView:recognizer.view];
- if (_bottomBar.isHidden && _musicView.hidden) {
- BOOL findEffect = NO;
- if (_effectSelectType == EffectSelectType_Paster) {
- for (NSInteger i = 0; i < _videoPasterInfoList.count; i++) {
- CGRect pasterFrame = [_videoPasterInfoList[i].pasterView pasterFrameOnView:recognizer.view];
- if (CGRectContainsPoint(pasterFrame, tapPoint)) {
- VideoPasterInfo *info = _videoPasterInfoList[i];
- if (_playTime >= info.startTime && _playTime <= info.endTime) {
- [self removeAllPasterViewFromSuperView];
- [_videoPreview addSubview:info.pasterView];
- [self setVideoPastersToSDK];
- findEffect = YES;
- break;
- }
- }
- }
- }
- else if (_effectSelectType == EffectSelectType_Text){
- for (NSInteger i = 0; i < _videoTextInfoList.count; i++) {
- CGRect textFrame = [_videoTextInfoList[i].textField textFrameOnView:recognizer.view];
- if (CGRectContainsPoint(textFrame, tapPoint)) {
- VideoTextInfo *info = _videoTextInfoList[i];
- if (_playTime >= info.startTime && _playTime <= info.endTime){
- [self removeAllTextFieldFromSuperView];
- [_videoPreview addSubview:info.textField];
- [self setVideoSubtitlesToSDK];
- findEffect = YES;
- break;
- }
- }
- }
- }
- if (findEffect) {
- [_ugcEdit previewAtTime:_playTime];
- [_ugcEdit pausePlay];
- [self setPlayBtn:NO];
- }
- }else{
- _musicView.hidden = YES;
- _bottomBar.hidden = NO;
- }
- }
- - (void)resetConfirmBtn
- {
- if(_bottomBar.isHidden){
- [_effectConfirmBtn setTitle:@"" forState:UIControlStateNormal];
- [_effectConfirmBtn setBackgroundImage:[UIImage imageNamed:@"cofirm_normal"] forState:UIControlStateNormal];
- [_effectConfirmBtn setBackgroundImage:[UIImage imageNamed:@"cofirm_press"] forState:UIControlStateHighlighted];
- _effectConfirmBtn.frame = CGRectMake(self.view.width - 15 * kScaleX - 44, 20 * kScaleY, 44, 30);
- }else{
- [_effectConfirmBtn setTitle:NSLocalizedString(@"Common.Done", nil) forState:UIControlStateNormal];
- _effectConfirmBtn.titleLabel.font = [UIFont systemFontOfSize:14];
- [_effectConfirmBtn setBackgroundImage:[UIImage imageNamed:@"next_normal"] forState:UIControlStateNormal];
- [_effectConfirmBtn setBackgroundImage:[UIImage imageNamed:@"next_press"] forState:UIControlStateHighlighted];
- _effectConfirmBtn.frame = CGRectMake(self.view.width - 15 * kScaleX - 70, 20 * kScaleY, 70, 30);
- }
- }
- - (void)goBack
- {
- if (_bottomBar.hidden) {
- UIAlertView *alert = [UIAlertView bk_showAlertViewWithTitle:NSLocalizedString(@"TCVideoEditView.AbandonEffect", nil) message:nil cancelButtonTitle:NSLocalizedString(@"Common.Cancel", nil) otherButtonTitles:@[NSLocalizedString(@"Common.OK", nil)] handler:^(UIAlertView *alertView, NSInteger buttonIndex) {
- if (buttonIndex == 1) {
- _musicView.hidden = YES;
- [self clearEffect];
- [self onHideEffectView];
- [self resetConfirmBtn];
- }
- }];
- [alert show];
- }else{
- UIAlertView *alert = [UIAlertView bk_showAlertViewWithTitle:NSLocalizedString(@"TCVideoEditView.AbandonEdit", nil) message:nil cancelButtonTitle:NSLocalizedString(@"Common.Cancel", nil) otherButtonTitles:@[NSLocalizedString(@"Common.OK", nil)] handler:^(UIAlertView *alertView, NSInteger buttonIndex) {
- if (buttonIndex == 1) {
- [_ugcEdit stopPlay];
- [self setPlayBtn:NO];
- if (_isFromCut) {
- [self dismissViewControllerAnimated:YES completion:nil];
- }else{
- [self.navigationController popViewControllerAnimated:YES];
- }
- }
- }];
- [alert show];
- }
- }
- - (void)goFinish
- {
- if (_bottomBar.hidden) {
- if (_effectSelectType == EffectSelectType_Paster) {
- [self removeAllPasterViewFromSuperView];
- [self setVideoPastersToSDK];
- }
- if (_effectSelectType == EffectSelectType_Text) {
- [self removeAllTextFieldFromSuperView];
- [self setVideoSubtitlesToSDK];
- }
- _bottomBar.hidden = NO;
- _musicView.hidden = YES;
- [self onHideEffectView];
- [self resetConfirmBtn];
- }else{
- __weak __typeof(self) ws = self;
- UIActionSheet *testSheet = [[UIActionSheet alloc] init];
- [testSheet bk_addButtonWithTitle:NSLocalizedString(@"Common.Save", nil) handler:^{
- [ws goSave];
- }];
- [testSheet bk_addButtonWithTitle:NSLocalizedString(@"Common.Release", nil) handler:^{
- [ws goPublish];
- }];
- [testSheet bk_setCancelButtonWithTitle:NSLocalizedString(@"Common.Cancel", nil) handler:nil];
- [testSheet showInView:self.view];
- }
- }
- - (void)goSave
- {
- _actionType = ActionType_Save;
- [self generateVideo];
- }
- - (void)goPublish
- {
- _actionType = ActionType_Publish;
- [self generateVideo];
- }
- - (void)onCancel:(UIButton*)sender
- {
- _generationView.hidden = YES;
- [_ugcEdit cancelGenerate];
- [_ugcEdit startPlayFromTime:0 toTime:_duration];
- [self setPlayBtn:YES];
- }
- - (void)onSelectMusic
- {
- if (_BGMPath) {
- _musicView.hidden = !_musicView.hidden;
- }else{
- [self resetVideoProgress];
- // UINavigationController *nv = [[UINavigationController alloc] initWithRootViewController:_bgmListVC];
- // [nv.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
- // nv.navigationBar.barTintColor = RGB(25, 29, 38);
- // [self presentViewController:nv animated:YES completion:nil];
- // [_bgmListVC loadBGMList];
- [self presetTonew_bgmList];
- }
- }
- /// 特效入口点击事件响应函数
- - (void)onShowEffectView
- {
- [self resetVideoProgress];
- _coverImageView.hidden = NO;
- _coverImageView.image = [TXVideoInfoReader getSampleImage:_playTime videoAsset:_videoAsset];
- _videoPreview.hidden = YES;
-
- [UIView animateWithDuration:0.3 animations:^{
- _coverImageView.frame = CGRectMake(0, 54 * kScaleY, self.view.width, 410 * kScaleY);
- _effectView.frame = CGRectMake(0, self.view.height - 205 * kScaleY, _effectView.width, _effectView.height);
- } completion:^(BOOL finished) {
- _videoPreview.frame = _coverImageView.frame;
- _videoPreview.hidden = NO;
- _coverImageView.hidden = YES;
- _bottomBar.hidden = YES;
- }];
- }
- - (void)onHideEffectView
- {
- _coverImageView.hidden = NO;
- _coverImageView.image = [TXVideoInfoReader getSampleImage:_playTime videoAsset:_videoAsset];
- _videoPreview.hidden = YES;
- _bottomBar.hidden = NO;
-
- [UIView animateWithDuration:0.3 animations:^{
- _coverImageView.frame = CGRectMake(0, 0, self.view.width,self.view.height);
- _effectView.frame = CGRectMake(0, self.view.height, _effectView.width, _effectView.height);
- } completion:^(BOOL finished) {
- _videoPreview.frame = _coverImageView.frame;
- _videoPreview.hidden = NO;
- _coverImageView.hidden = YES;
- }];
- [self startPlayFromTime:0 toTime:_duration];
- [self setPlayBtn:YES];
- }
- -(void)onDeleteEffect
- {
- CGFloat endTime = 0;
- if (_effectSelectType == EffectSelectType_Effect) {
- VideoColorInfo *info = [_videoCutView removeLastColoration:ColorType_Effect];
- if (info) {
- float time = _isReverse ? MAX(info.endPos, info.startPos) : MIN(info.endPos, info.startPos);
- [_videoCutView setPlayTime:time];
- _playTime = time;
- }
- [_ugcEdit deleteLastEffect];
- }
- else if (_effectSelectType == EffectSelectType_Paster){
- if (_pasterEffectArray.count <= 1) {
- return;
- }
- VideoPasterInfo *info = [_videoPasterInfoList lastObject];
- [info.pasterView removeFromSuperview];
- [_videoPasterInfoList removeLastObject];
- [_pasterEffectArray removeObjectAtIndex:_pasterEffectArray.count - 2];
- [_effectSelectView setEffectList:_pasterEffectArray];
- [_videoCutView removeLastColoration:ColorType_Paster];
- if (_videoPasterInfoList.count > 0) {
- VideoPasterInfo *info = [_videoPasterInfoList lastObject];
- [self setLeftPanFrame:info.startTime rightPanFrame:info.endTime];
- endTime = info.endTime;
- }else{
- [self setLeftPanFrame:0 rightPanFrame:0];
- endTime = 0;
- }
- [self setVideoPastersToSDK];
- [_ugcEdit previewAtTime:endTime];
- }
- else if (_effectSelectType == EffectSelectType_Text){
- if (_textEffectArray.count <= 1) {
- return;
- }
- VideoTextInfo *info = [_videoTextInfoList lastObject];
- [info.textField removeFromSuperview];
- [_videoTextInfoList removeLastObject];
- [_textEffectArray removeObjectAtIndex:_textEffectArray.count - 2];
- [_effectSelectView setEffectList:_textEffectArray];
- [_videoCutView removeLastColoration:ColorType_Text];
- if (_videoTextInfoList.count > 0) {
- VideoTextInfo *info = [_videoTextInfoList lastObject];
- [self setLeftPanFrame:info.startTime rightPanFrame:info.endTime];
- endTime = info.endTime;
- }else{
- [self setLeftPanFrame:0 rightPanFrame:0];
- endTime = 0;
- }
- [self setVideoSubtitlesToSDK];
- [_ugcEdit previewAtTime:endTime];
- }
- }
- - (void)removeAllPasterViewFromSuperView
- {
- for (VideoPasterInfo* pasterInfo in _videoPasterInfoList) {
- [pasterInfo.pasterView removeFromSuperview];
- }
- }
- - (void)removeAllTextFieldFromSuperView
- {
- for (VideoTextInfo* textInfo in _videoTextInfoList) {
- [textInfo.textField removeFromSuperview];
- }
- }
- - (void)removeCurrentPasterInfo
- {
- if (_effectSelectIndex >= _videoPasterInfoList.count
- || _effectSelectIndex >= _pasterEffectArray.count - 1
- || _effectSelectIndex < 0) {
- return;
- }
- [_videoPasterInfoList removeObjectAtIndex:_effectSelectIndex];
- [_pasterEffectArray removeObjectAtIndex:_effectSelectIndex];
- [_effectSelectView setEffectList:_pasterEffectArray];
- [_videoCutView removeColoration:ColorType_Paster index:_effectSelectIndex];
-
- if (_videoPasterInfoList.count > 0) {
- VideoPasterInfo *info = [_videoPasterInfoList lastObject];
- [self setLeftPanFrame:info.startTime rightPanFrame:info.endTime];
- }else{
- [self setLeftPanFrame:0 rightPanFrame:0];
- }
- _effectSelectIndex = _pasterEffectArray.count - 2;
- [self setVideoPastersToSDK];
- }
- - (void)removeCurrentTextInfo
- {
- if (_effectSelectIndex >= _videoTextInfoList.count
- || _effectSelectIndex >= _textEffectArray.count - 1
- || _effectSelectIndex < 0) {
- return;
- }
- [_videoTextInfoList removeObjectAtIndex:_effectSelectIndex];
- [_textEffectArray removeObjectAtIndex:_effectSelectIndex];
- [_effectSelectView setEffectList:_textEffectArray];
- [_videoCutView removeColoration:ColorType_Text index:_effectSelectIndex];
-
- if (_videoTextInfoList.count > 0) {
- VideoTextInfo *info = [_videoTextInfoList lastObject];
- [self setLeftPanFrame:info.startTime rightPanFrame:info.endTime];
- }else{
- [self setLeftPanFrame:0 rightPanFrame:0];
- }
- _effectSelectIndex = _textEffectArray.count - 2;
- [self setVideoSubtitlesToSDK];
- }
- - (CGFloat)getLastPasterEndTime
- {
- if (_videoPasterInfoList.count > 0) {
- return [_videoPasterInfoList lastObject].endTime;
- }
- return 0;
- }
- - (CGFloat)getLastTextEndTime
- {
- if (_videoTextInfoList.count > 0) {
- return [_videoTextInfoList lastObject].endTime;
- }
- return 0;
- }
- - (void)clearEffect
- {
- switch (_effectSelectType) {
- case EffectSelectType_Effect:
- break;
- case EffectSelectType_Time:
- {
- [_ugcEdit setSpeedList:nil];
- [_ugcEdit setReverse:NO];
- [_ugcEdit setRepeatPlay:nil];
- [_videoCutView setCenterPanHidden:YES];
- _timeIndex = 0;
- }
- break;
- case EffectSelectType_Filter:
- {
- [_ugcEdit setFilter:nil];
- _filterIndex = 0;
- }
- break;
- case EffectSelectType_Paster:
- {
- NSInteger i = _videoPasterInfoList.count;
- while (i > 0) {
- [_videoCutView removeLastColoration:ColorType_Paster];
- i -- ;
- }
- [self removeAllPasterViewFromSuperView];
- [_videoPasterInfoList removeAllObjects];
- [_pasterEffectArray removeObjectsInRange:NSMakeRange(0, _pasterEffectArray.count - 1)];
- [_ugcEdit setPasterList:nil];
- [_ugcEdit setAnimatedPasterList:nil];
- }
- break;
- case EffectSelectType_Text:
- {
- NSInteger i = _videoTextInfoList.count;
- while (i > 0) {
- [_videoCutView removeLastColoration:ColorType_Text];
- i -- ;
- }
- [self removeAllTextFieldFromSuperView];
- [_videoTextInfoList removeAllObjects];
- [_textEffectArray removeObjectsInRange:NSMakeRange(0, _textEffectArray.count - 1)];
- [_ugcEdit setSubtitleList:nil];
- }
- break;
- default:
- break;
- }
- }
- - (void)resetVideoProgress
- {
- _playTime = 0;
- _isSeek = YES;
- _isPlay = NO;
- _timeLabel.text = @"00:00";
- [_ugcEdit previewAtTime:_playTime];
- [self setPlayBtn:NO];
- }
- //设置特效选中区间
- - (void)setLeftPanFrame:(CGFloat)leftTime rightPanFrame:(CGFloat)rightTime
- {
- if (leftTime == 0 && rightTime == 0) {
- [_videoCutView setLeftPanHidden:YES];
- [_videoCutView setRightPanHidden:YES];
- [_videoCutView setLeftPanFrame:0];
- [_videoCutView setRightPanFrame:0];
- [_videoCutView setPlayTime:0];
- }else{
- [_videoCutView setLeftPanHidden:NO];
- [_videoCutView setRightPanHidden:NO];
- [_videoCutView setLeftPanFrame:leftTime];
- [_videoCutView setRightPanFrame:rightTime];
- [_videoCutView setPlayTime:leftTime];
- }
- }
- -(void)startPlayFromTime:(CGFloat)startTime toTime:(CGFloat)endTime
- {
- [_ugcEdit startPlayFromTime:startTime toTime:endTime];
- _isSeek = NO;
- _isPlay = YES;
- }
- #pragma mark - To SDK
- - (void)generateVideo
- {
- [_ugcEdit pausePlay];
- [self setPlayBtn:NO];
-
- if (YES == [[[NSUserDefaults standardUserDefaults] objectForKey:hasAgreeUserAgreement] boolValue] || _actionType == ActionType_Save) {
- [self confirmGenerateVideo];
- }else{
- TCUserAgreementController *agreementController = [[TCUserAgreementController alloc] init];
- __weak __typeof(self) weakSelf = self;
- agreementController.agree = ^(BOOL isAgree) {
- if (isAgree) {
- [[NSUserDefaults standardUserDefaults] setObject:@YES forKey:hasAgreeUserAgreement];
- [weakSelf.navigationController dismissViewControllerAnimated:YES completion:nil];
- [weakSelf confirmGenerateVideo];
- }else{
- UIAlertView *alert = [UIAlertView bk_showAlertViewWithTitle:@"不同意用户协议将无法发布视频" message:nil cancelButtonTitle:NSLocalizedString(@"Common.OK", nil) otherButtonTitles:nil handler:^(UIAlertView *alertView, NSInteger buttonIndex) {
- [[NSUserDefaults standardUserDefaults] setObject:@NO forKey:hasAgreeUserAgreement];
- [self.navigationController dismissViewControllerAnimated:YES completion:nil];
- }];
- [alert show];
- }
- };
- [self.navigationController presentViewController:agreementController animated:YES completion:nil];
- }
- }
- - (void)confirmGenerateVideo
- {
- _generationView = [self generatingView];
- _generationView.hidden = NO;
- _generateCannelBtn.hidden = NO;
- [_ugcEdit setCutFromTime:0 toTime:_duration];
- [_ugcEdit generateVideo:VIDEO_COMPRESSED_720P videoOutputPath:_videoOutputPath];
- }
- - (void)publishVideo
- {
- // [self.navigationController popViewControllerAnimated:YES];
- // [self.navigationController popViewControllerAnimated:YES];
- // return;
- [self showVideoDynamicViewC];
- [_videoDynamicViewC upLoadVideoUrl:_videoOutputPath];
-
- [[AppDelegate sharedAppDelegate]pushViewController:_videoDynamicViewC];
- __block typeof(self)blockself =self;
- TXVideoInfo *videoInfo = [TXVideoInfoReader getVideoInfo:_videoOutputPath];
- TXPublishParam *publishParam = [[TXPublishParam alloc] init];
- publishParam.signature = @"";
- publishParam.coverPath = [self getCoverPath:videoInfo.coverImage];
- publishParam.videoPath = _videoOutputPath;
-
-
-
-
- // Submit_download_resources *resource =[Submit_download_resources new];
- // resource.ossManager = self.ossmanger;
- // [[BGHUDHelper sharedInstance]syncLoading:@"视频提交至服务器中..."];
- NSLog(@"VideoDynamicView-1-1-1-1");
-
-
- // [[BGHUDHelper sharedInstance] syncStopLoading];
- // [resource upLoadVideoAction:_videoOutputPath andCouver:publishParam.coverPath andCallback:^(id response) {
- // if (response && [response isKindOfClass:[NSDictionary class]])
- // {
- // [[BGHUDHelper sharedInstance] syncStopLoading];
- //
- //
- //// //返回视频地址和预览图地址进行提交
- //// [blockself uploadHttpServiceDynamic:response[@"videourl"] andcoverurl:response[@"couverurl"]];
- // }
- // }];
- // [_videoPublish publishVideo:publishParam];
- // [[TCLoginModel sharedInstance] getVodSign:^(int errCode, NSString *msg, NSDictionary *resultDict) {
- // [TCUtil report:xiaoshipin_videosign userName:nil code:errCode msg:msg];
- // if (errCode == 200 && resultDict){
- // NSString *signature = resultDict[@"signature"];
- // if (signature && signature.length > 0 && _videoPublish) {
- // TXVideoInfo *videoInfo = [TXVideoInfoReader getVideoInfo:_videoOutputPath];
- // TXPublishParam *publishParam = [[TXPublishParam alloc] init];
- // publishParam.signature = signature;
- // publishParam.coverPath = [self getCoverPath:videoInfo.coverImage];
- // publishParam.videoPath = _videoOutputPath;
- // [_videoPublish publishVideo:publishParam];
- // }
- // }else{
- // _generationView.hidden = YES;
- // UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"TCVideoEditView.VideoUploadingFailed", nil)
- // message:[NSString stringWithFormat:NSLocalizedString(@"Common.HintErrorCodeMessage", nil),(long)errCode,msg]
- // delegate:self
- // cancelButtonTitle:NSLocalizedString(@"Common.GotIt", nil)
- // otherButtonTitles:nil, nil];
- // [alertView show];
- // }
- // }];
-
- }
- #pragma mark - 5 - 视频动态页面
- -(void)showVideoDynamicViewC
- {
- _videoDynamicViewC = (VideoDynamicViewC *)[VideoDynamicViewC showSTBaseViewCOnSuperViewC:[AppDelegate sharedAppDelegate].topViewController.tabBarController.selectedViewController
- andFrameRect:CGRectMake(0, 0, kScreenW, kScreenH)
- andSTViewCTransitionType:STViewCTransitionTypeOfModal
- andComplete:^(BOOL finished,
- STBaseViewC *stBaseViewC) {
-
- }];
-
- _videoDynamicViewC.recordTabBarC = [AppDelegate sharedAppDelegate].topViewController.tabBarController;
- [_videoDynamicViewC videoDynamicView];
- [_videoDynamicViewC showPublishDynamic];
- // 开启IQ
- _videoDynamicViewC.title = @"发布小视频";
- _videoDynamicViewC.navigationItem.title = @"发布小视频";
- _videoDynamicViewC.navigationController.navigationBar.tintColor =kAppGrayColor1;
- self.navigationController.navigationItem.title = @"发布小视频";
- //改变颜色 必须跳转后
- _videoDynamicViewC.navigationController.navigationBar.hidden = NO;
- [_videoDynamicViewC.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:19],NSForegroundColorAttributeName:kAppGrayColor1}];
- _videoDynamicViewC.isOpenIQKeyboardManager = YES;
-
- [self.navigationController popToRootViewControllerAnimated:YES];
- }
- - (void)uploadHttpServiceDynamic:(NSString *)videourl andcoverurl:(NSString *)coverurl
- {
- // [MGTCVideoRecordManager dM_VideoManager_getBackgroundMiusicWithVideoUrl:[NSURL URLWithString:videourl] newFile:@"" completion:^(NSString * _Nonnull data) {
- //
- // NSLog(@"%@",data);
- //
- //
- // }];
-
-
- //地图管理类
- STBMKCenter *stBMKCenter = [STBMKCenter shareManager];
- NSString *mid =@"0";
- if(_element)
- {
- mid =_element.id;
- }
- //参数MDic
- NSMutableDictionary *parametersMDic = @{@"ctl" :@"publish",
- @"act" :@"do_video_publish",
- @"itype" :@"xr",
- @"publish_type" :@"video", // 发布商品
- @"content" :@"合拍", // 动态文本
- @"photo_image" :coverurl, // OSS 封面图 URL
- @"video_url" :videourl, // OSS 视频 URL
- @"latitude" :@(stBMKCenter.latitudeValue), // 纬度值
- @"longitude" :@(stBMKCenter.longitudeValue), // 经度值
- @"city" :stBMKCenter.cityNameStr, // 城市名称
- @"province" :stBMKCenter.provinceStr, // 省会
- @"address" :stBMKCenter.detailAdressStr, // 具体坐标地址
- @"mid" :mid,
- }.mutableCopy;
- FWWeakify(self)
- [[NetHttpsManager manager]POSTWithParameters:parametersMDic
- SuccessBlock:^(NSDictionary *responseJson) {
- [[BGHUDHelper sharedInstance]syncStopLoading];
- if( [[responseJson allKeys] containsObject:@"status"]&&[responseJson[@"status"] intValue] == 1)
- {
- //[[BGHUDHelper sharedInstance]tipMessage:@"发布成功!"];
- [[BGHUDHelper sharedInstance] syncStopLoading];
- [BGHUDHelper alert:@"发布成功!" action:^{
- FWStrongify(self)
- // 执行退出
- @autoreleasepool {
- self.ossmanger = nil;
-
- self.navigationController.hidesBottomBarWhenPushed = NO;
- [self.navigationController popToRootViewControllerAnimated:YES];
- Noti_Post_Param(@"DynamicCommitSuccess", nil);
- }
- }];
- }
- } FailureBlock:^(NSError *error) {
- [[BGHUDHelper sharedInstance]syncStopLoading];
- [[BGHUDHelper sharedInstance]tipMessage:@"发布失败!"];
-
- }];
- }
- //设置贴纸(静态/动态贴纸)
- - (void)setVideoPastersToSDK
- {
- NSMutableArray* animatePasters = [NSMutableArray new];
- NSMutableArray* staticPasters = [NSMutableArray new];
- for (VideoPasterInfo* pasterInfo in _videoPasterInfoList) {
- if ([_videoPreview.subviews containsObject:pasterInfo.pasterView]) {
- continue;
- }
- if (pasterInfo.pasterInfoType == PasterInfoType_Animate) {
- TXAnimatedPaster* paster = [TXAnimatedPaster new];
- paster.startTime = pasterInfo.startTime;
- paster.endTime = pasterInfo.endTime;
- paster.frame = [pasterInfo.pasterView pasterFrameOnView:_videoPreview];
- paster.rotateAngle = pasterInfo.pasterView.rotateAngle * 180 / M_PI;
- paster.animatedPasterpath = pasterInfo.path;
- [animatePasters addObject:paster];
- }
- else if (pasterInfo.pasterInfoType == PasterInfoType_static){
- TXPaster *paster = [TXPaster new];
- paster.startTime = pasterInfo.startTime;
- paster.endTime = pasterInfo.endTime;
- paster.frame = [pasterInfo.pasterView pasterFrameOnView:_videoPreview];
- paster.pasterImage = pasterInfo.pasterView.staticImage;
- [staticPasters addObject:paster];
- }
- }
- [_ugcEdit setAnimatedPasterList:animatePasters];
- [_ugcEdit setPasterList:staticPasters];
- }
- //设置字幕(气泡)
- - (void)setVideoSubtitlesToSDK
- {
- NSMutableArray* subtitles = [NSMutableArray new];
- NSMutableArray<VideoTextInfo*>* emptyVideoTexts;
- for (VideoTextInfo* textInfo in _videoTextInfoList) {
- if (textInfo.textField.text.length < 1) {
- [emptyVideoTexts addObject:textInfo];
- continue;
- }
- if ([_videoPreview.subviews containsObject:textInfo.textField]) {
- continue;
- }
-
- TXSubtitle* subtitle = [TXSubtitle new];
- subtitle.titleImage = textInfo.textField.textImage;
- subtitle.frame = [textInfo.textField textFrameOnView:_videoPreview];
- subtitle.startTime = textInfo.startTime;
- subtitle.endTime = textInfo.endTime;
- [subtitles addObject:subtitle];
- }
- [_ugcEdit setSubtitleList:subtitles];
- }
- - (void)setFilter:(NSInteger)index
- {
- _filterIndex = index;
- NSString* lookupFileName = @"";
- switch (index) {
- case FilterType_None:
- break;
- case FilterType_biaozhun:
- lookupFileName = @"biaozhun.png";
- break;
- case FilterType_yinghong:
- lookupFileName = @"yinghong.png";
- break;
- case FilterType_yunshang:
- lookupFileName = @"yunshang.png";
- break;
- case FilterType_chunzhen:
- lookupFileName = @"chunzhen.png";
- break;
- case FilterType_bailan:
- lookupFileName = @"bailan.png";
- break;
- case FilterType_yuanqi:
- lookupFileName = @"yuanqi.png";
- break;
- case FilterType_chaotuo:
- lookupFileName = @"chaotuo.png";
- break;
- case FilterType_xiangfen:
- lookupFileName = @"xiangfen.png";
- break;
- case FilterType_white:
- lookupFileName = @"white.png";
- break;
- case FilterType_langman:
- lookupFileName = @"langman.png";
- break;
- case FilterType_qingxin:
- lookupFileName = @"qingxin.png";
- break;
- case FilterType_weimei:
- lookupFileName = @"weimei.png";
- break;
- case FilterType_fennen:
- lookupFileName = @"fennen.png";
- break;
- case FilterType_huaijiu:
- lookupFileName = @"huaijiu.png";
- break;
- case FilterType_landiao:
- lookupFileName = @"landiao.png";
- break;
- case FilterType_qingliang:
- lookupFileName = @"qingliang.png";
- break;
- case FilterType_rixi:
- lookupFileName = @"rixi.png";
- break;
- default:
- break;
- }
-
- NSString * path = [[NSBundle mainBundle] pathForResource:@"FilterResource" ofType:@"bundle"];
- UIImage* image;
- if (path != nil && index != FilterType_None) {
- path = [path stringByAppendingPathComponent:lookupFileName];
- image = [UIImage imageWithContentsOfFile:path];
- } else {
- image = nil;
- }
- [_ugcEdit setFilter:image];
- }
- #pragma mark VideoPreviewDelegate
- - (void)onVideoPlay
- {
- [self startPlayFromTime:0 toTime:_duration];
- }
- - (void)onVideoPlayProgress:(CGFloat)time
- {
- if (!_isSeek) {
- _playTime = time;
- [_videoCutView setPlayTime:_playTime];
- _timeLabel.text = [NSString stringWithFormat:@"%02d:%02d",(int)_playTime / 60 , (int)_playTime % 60];
- }
- }
- - (void)onVideoPlayFinished
- {
- if (_effectType != -1) {
- [self onEffectBtnEndSelect:nil];
- }else{
- [self startPlayFromTime:0 toTime:_duration];
- }
- }
- #pragma mark TXVideoGenerateListener
- -(void) onGenerateProgress:(float)progress
- {
- _generateProgressView.progress = progress;
- }
- -(void) onGenerateComplete:(TXGenerateResult *)result
- {
- [TCUtil report:xiaoshipin_videoedit userName:nil code:result.retCode msg:result.descMsg];
- if (result.retCode == 0) {
- if (_actionType == ActionType_Publish) {
- _generationTitleLabel.text = NSLocalizedString(@"TCVideoEditView.VideoReleasing", nil);
- _generateProgressView.progress = 0;
- _generateCannelBtn.hidden = YES;
- _generationView.hidden =YES;
- [self publishVideo];
- }else{
- _generationView.hidden = YES;
- ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
- [library writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:_videoOutputPath] completionBlock:^(NSURL *assetURL, NSError *error) {
- if (error != nil) {
- [self toastTip:NSLocalizedString(@"TCVideoEditView.VideoSavingFailed", nil)];
- }else{
- [self toastTip:NSLocalizedString(@"TCVideoEditView.VideoSavingSucceeded", nil)];
- }
- [self performSelector:@selector(dismissViewController) withObject:nil afterDelay:1];
- }];
- }
- }else{
- _generationView.hidden = YES;
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"TCVideoCutView.HintVideoGeneratingFailed", nil)
- message:[NSString stringWithFormat:NSLocalizedString(@"Common.HintErrorCodeMessage", nil),(long)result.retCode,result.descMsg]
- delegate:self
- cancelButtonTitle:NSLocalizedString(@"Common.GotIt", nil)
- otherButtonTitles:nil, nil];
- [alertView show];
- }
- }
- #pragma mark - TXVideoPublishListener
- -(void) onPublishProgress:(uint64_t)uploadBytes totalBytes: (uint64_t)totalBytes
- {
- _generateProgressView.progress = (float)uploadBytes / totalBytes;;
- }
- -(void) onPublishComplete:(TXPublishResult*)result
- {
- [TCUtil report:xiaoshipin_videouploadvod userName:nil code:result.retCode msg:result.descMsg];
- _generationView.hidden = YES;
- if (result.retCode != 0) {
- [self toastTip:NSLocalizedString(@"TCVideoEditView.VideoReleasingFailed", nil)];
- }else{
- NSString *title = @"小视频";
- // NSDictionary* dictParam = @{@"userid" :[TCLoginParam shareInstance].identifier,
- // @"file_id" : result.videoId,
- // @"title":title,
- // @"frontcover":result.coverURL == nil ? @"" : result.coverURL,
- // @"location":@"未知",
- // @"play_url":result.videoURL};
- // [[TCLoginModel sharedInstance] uploadUGC:dictParam completion:^(int errCode, NSString *msg, NSDictionary *resultDict) {
- // [TCUtil report:xiaoshipin_videouploadserver userName:nil code:errCode msg:msg];
- // if (200 == errCode) {
- // [self toastTip:NSLocalizedString(@"TCVideoEditView.VideoReleasingSucceeded", nil)];
- // } else {
- // [self toastTip:[NSString stringWithFormat:@"UploadUGCVideo Failed[%d]", errCode]];
- // }
- // [self performSelector:@selector(dismissViewController) withObject:nil afterDelay:1];
- // }];
- }
- }
- - (void)dismissViewController
- {
- [_ugcEdit stopPlay];
- if (_isFromChorus){
- [self.navigationController popToRootViewControllerAnimated:YES];
- }else{
- [self dismissViewControllerAnimated:YES completion:^{
- [[NSNotificationCenter defaultCenter] postNotificationName:kTCLiveListUpdated object:nil];
- }];
- }
- //缓存视频状态置nil
- [[NSUserDefaults standardUserDefaults] setObject:nil forKey:CACHE_PATH_LIST];
- }
- #pragma mark - BottomTabBarDelegate
- - (void)onMusicBtnClicked
- {
- _bottomBar.hidden = YES;
- [self onSelectMusic];
- [self setLeftPanFrame:0 rightPanFrame:0];
- [self resetConfirmBtn];
- }
- - (void)onEffectBtnClicked
- {
- _bottomBar.hidden = YES;
- _deleteBtn.hidden = NO;
- [self resetConfirmBtn];
- [self resetVideoProgress];
- [self onShowEffectView];
- [self removeAllTextFieldFromSuperView];
- [self removeAllPasterViewFromSuperView];
- [self setLeftPanFrame:0 rightPanFrame:0];
- _effectSelectType = EffectSelectType_Effect;
- [_videoCutView setColorType:ColorType_Effect];
- [_videoCutView setCenterPanHidden:YES];
- __block NSArray <EffectInfo *> *effectArray = nil;
- dispatch_barrier_sync(_imageLoadingQueue, ^{
- effectArray = _effectList;
- });
- [_effectSelectView setEffectList:effectArray momentary:YES];
- }
- -(void)onTimeBtnClicked
- {
- _bottomBar.hidden = YES;
- _deleteBtn.hidden = YES;
- [self resetConfirmBtn];
- [self resetVideoProgress];
- [self onShowEffectView];
- [self removeAllTextFieldFromSuperView];
- [self removeAllPasterViewFromSuperView];
- [self setLeftPanFrame:0 rightPanFrame:0];
- _effectSelectType = EffectSelectType_Time;
- [_videoCutView setColorType:ColorType_Time];
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
- NSMutableArray <EffectInfo *> *effectArray = [NSMutableArray array];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"Common.None", nil);
- v.animateIcons = [NSMutableArray array];
- for (int i = 0; i < 20; i ++) {
- [v.animateIcons addObject:[UIImage imageNamed:[NSString stringWithFormat:@"jump_%d",i]]];
- }
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray1Object1", nil);
- v.animateIcons = [NSMutableArray array];
- v.selectIcon = [UIImage imageNamed:@"timeBack_select"];
- for (int i = 19; i >= 0; i --) {
- [v.animateIcons addObject:[UIImage imageNamed:[NSString stringWithFormat:@"jump_%d",i]]];
- }
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray1Object2", nil);
- v.animateIcons = [NSMutableArray array];
- v.selectIcon = [UIImage imageNamed:@"repeat_select"];
- NSMutableArray *repeatIcons = [NSMutableArray array];
- for (int i = 0; i < 20; i ++) {
- UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"jump_%d",i]];
- if (i >= 5 && i <= 15) {
- [repeatIcons addObject:image];
- }
- if (i == 15) {
- [v.animateIcons addObjectsFromArray:repeatIcons];
- [v.animateIcons addObjectsFromArray:repeatIcons];
- }
- [v.animateIcons addObject:image];
- }
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray1Object3", nil);
- v.animateIcons = [NSMutableArray array];
- v.selectIcon = [UIImage imageNamed:@"slow_select"];
- v.isSlow = YES;
- for (int i = 0; i < 20; i ++) {
- [v.animateIcons addObject:[UIImage imageNamed:[NSString stringWithFormat:@"jump_%d",i]]];
- }
- v;
- })];
- dispatch_async(dispatch_get_main_queue(), ^{
- [_effectSelectView setEffectList:effectArray];
- _effectSelectView.selectedIndex = _timeIndex;
- });
- });
- }
- - (void)onFilterBtnClicked
- {
- _bottomBar.hidden = YES;
- _deleteBtn.hidden = YES;
- [self resetConfirmBtn];
- [self resetVideoProgress];
- [self onShowEffectView];
- [self setLeftPanFrame:0 rightPanFrame:0];
- NSMutableArray <EffectInfo *> *effectArray = [NSMutableArray array];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object1", nil);
- v.icon = [UIImage imageNamed:@"orginal"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object2", nil);
- v.icon = [UIImage imageNamed:@"biaozhun"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object3", nil);
- v.icon = [UIImage imageNamed:@"yinghong"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object4", nil);
- v.icon = [UIImage imageNamed:@"yunshang"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object5", nil);
- v.icon = [UIImage imageNamed:@"chunzhen"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object6", nil);
- v.icon = [UIImage imageNamed:@"bailan"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object7", nil);
- v.icon = [UIImage imageNamed:@"yuanqi"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object8", nil);
- v.icon = [UIImage imageNamed:@"chaotuo"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object9", nil);
- v.icon = [UIImage imageNamed:@"xiangfen"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
-
- [effectArray addObject:({
- EffectInfo *v = [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object10", nil);
- v.icon = [UIImage imageNamed:@"fwhite"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
-
- [effectArray addObject:({
- EffectInfo *v = [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object11", nil);
- v.icon = [UIImage imageNamed:@"langman"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo *v = [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object12", nil);
- v.icon = [UIImage imageNamed:@"qingxin"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo *v = [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object13", nil);
- v.icon = [UIImage imageNamed:@"weimei"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo *v = [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object14", nil);
- v.icon = [UIImage imageNamed:@"fennen"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo *v = [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object15", nil);
- v.icon = [UIImage imageNamed:@"huaijiu"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo *v = [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object16", nil);
- v.icon = [UIImage imageNamed:@"landiao"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo *v = [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object17", nil);
- v.icon = [UIImage imageNamed:@"qingliang"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [effectArray addObject:({
- EffectInfo *v = [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.EffectArray2Object18", nil);
- v.icon = [UIImage imageNamed:@"rixi"];
- v.selectIcon = [UIImage imageNamed:@"orginal_select"];
- v;
- })];
- [_effectSelectView setEffectList:effectArray];
- _effectSelectType = EffectSelectType_Filter;
- _effectSelectView.selectedIndex = _filterIndex;
- [_videoCutView setColorType:ColorType_Filter];
- [_videoCutView setCenterPanHidden:YES];
- [self removeAllTextFieldFromSuperView];
- [self removeAllPasterViewFromSuperView];
- }
- - (void)onPasterBtnClicked
- {
- _bottomBar.hidden = YES;
- _deleteBtn.hidden = NO;
- [self resetConfirmBtn];
- [self resetVideoProgress];
- [self onShowEffectView];
- [self removeAllTextFieldFromSuperView];
- [self setLeftPanFrame:0 rightPanFrame:0];
- [_effectSelectView setEffectList:_pasterEffectArray];
- [_videoCutView setColorType:ColorType_Paster];
- [_videoCutView setCenterPanHidden:YES];
- _effectSelectType = EffectSelectType_Paster;
- }
- - (void)onTextBtnClicked
- {
- _bottomBar.hidden = YES;
- _deleteBtn.hidden = NO;
- [self resetConfirmBtn];
- [self resetVideoProgress];
- [self onShowEffectView];
- [self removeAllPasterViewFromSuperView];
- [self setLeftPanFrame:0 rightPanFrame:0];
- [_effectSelectView setEffectList:_textEffectArray];
- [_videoCutView setColorType:ColorType_Text];
- [_videoCutView setCenterPanHidden:YES];
- _effectSelectType = EffectSelectType_Text;
- }
- #pragma mark EffectSelectViewDelegate
- -(void)onEffectBtnBeginSelect:(UIButton *)btn
- {
- if (_effectSelectType != EffectSelectType_Effect) {
- return;
- }
- _effectType = (TXEffectType)btn.tag;
- UIColor *color = TXCVEFColorPaletteColorAtIndex(btn.tag);
- [_videoCutView startColoration:color alpha:0.7];
- [_ugcEdit startEffect:(TXEffectType)_effectType startTime:_playTime];
- if (!_isReverse) {
- [self startPlayFromTime:_playTime toTime:_duration];
- }else{
- [self startPlayFromTime:0 toTime:_playTime];
- }
- [self setPlayBtn:YES];
- }
- -(void)onEffectBtnEndSelect:(UIButton *)btn
- {
- if (_effectType != -1) {
- [_videoCutView stopColoration];
- [_ugcEdit stopEffect:_effectType endTime:_playTime];
- [_ugcEdit pausePlay];
- _effectType = -1;
- [self setPlayBtn:NO];
- }
- }
- -(void)onEffectBtnSelected:(UIButton *)btn
- {
- _effectSelectIndex = btn.tag;
- switch (_effectSelectType) {
- case EffectSelectType_Time:
- {
- switch (_effectSelectIndex) {
- case 0:
- [self onVideoTimeEffectsClear];
- break;
- case 1:
- [self onVideoTimeEffectsBackPlay];
- break;
- case 2:
- [self onVideoTimeEffectsRepeat];
- break;
- case 3:
- [self onVideoTimeEffectsSpeed];
- break;
- default:
- break;
- }
- _timeIndex = _effectSelectIndex;
- }
- break;
- case EffectSelectType_Filter:
- {
- [self setFilter:_effectSelectIndex];
- if (!_isPlay) {
- [_ugcEdit resumePlay];
- [self setPlayBtn:YES];
- _isPlay = YES;
- _isSeek = NO;
- }
- }
- break;
- case EffectSelectType_Paster:
- {
- [_ugcEdit pausePlay];
- [self setPlayBtn:NO];
- [self removeAllPasterViewFromSuperView];
- if (_effectSelectIndex == _pasterEffectArray.count - 1) {
- _pasterAddView.hidden = NO;
- [_pasterAddView setPasterType:PasterType_Animate];
- }else{
- VideoPasterInfo* pasterInfo = _videoPasterInfoList[_effectSelectIndex];
- [_videoPreview addSubview:pasterInfo.pasterView];
- [self setLeftPanFrame:pasterInfo.startTime rightPanFrame:pasterInfo.endTime];
- [_ugcEdit previewAtTime:pasterInfo.endTime];
- }
- }
- break;
-
- case EffectSelectType_Text:
- {
- [_ugcEdit pausePlay];
- [self setPlayBtn:NO];
- [self removeAllTextFieldFromSuperView];
- if (_effectSelectIndex == _textEffectArray.count - 1) {
- _pasterAddView.hidden = NO;
- [_pasterAddView setPasterType:PasterType_Qipao];
- }else{
- VideoTextInfo* textInfo = _videoTextInfoList[_effectSelectIndex];
- [_videoPreview addSubview:textInfo.textField];
- [self setLeftPanFrame:textInfo.startTime rightPanFrame:textInfo.endTime];
- [_ugcEdit previewAtTime:textInfo.endTime];
- }
- }
- break;
-
- default:
- break;
- }
- }
- - (void)onVideoTimeEffectsClear
- {
- _timeType = TimeType_Clear;
- _isReverse = NO;
- [_ugcEdit setReverse:_isReverse];
- [_ugcEdit setRepeatPlay:nil];
- [_ugcEdit setSpeedList:nil];
- [self startPlayFromTime:0 toTime:_duration];
-
- [self setPlayBtn:YES];
- [_videoCutView setCenterPanHidden:YES];
- }
- - (void)onVideoTimeEffectsBackPlay
- {
- _timeType = TimeType_Back;
- _isReverse = YES;
- [_ugcEdit setReverse:_isReverse];
- [_ugcEdit setRepeatPlay:nil];
- [_ugcEdit setSpeedList:nil];
- [self startPlayFromTime:0 toTime:_duration];
-
- [self setPlayBtn:YES];
- [_videoCutView setCenterPanHidden:YES];
- }
- - (void)onVideoTimeEffectsRepeat
- {
- _timeType = TimeType_Repeat;
- _isReverse = NO;
- [_ugcEdit setReverse:_isReverse];
- [_ugcEdit setSpeedList:nil];
- TXRepeat *repeat = [[TXRepeat alloc] init];
- repeat.startTime = _duration / 5;
- repeat.endTime = repeat.startTime + 0.5;
- repeat.repeatTimes = 3;
- [_ugcEdit setRepeatPlay:@[repeat]];
- [self startPlayFromTime:0 toTime:_duration];
-
- [self setPlayBtn:YES];
- [_videoCutView setCenterPanHidden:NO];
- [_videoCutView setCenterPanFrame:repeat.startTime];
- }
- - (void)onVideoTimeEffectsSpeed
- {
- _timeType = TimeType_Speed;
- _isReverse = NO;
- [_ugcEdit setReverse:_isReverse];
- [_ugcEdit setRepeatPlay:nil];
- TXSpeed *speed1 =[[TXSpeed alloc] init];
- speed1.startTime = _duration* 1.5 / 5;
- speed1.endTime = speed1.startTime + 0.5;
- speed1.speedLevel = SPEED_LEVEL_SLOW;
- TXSpeed *speed2 =[[TXSpeed alloc] init];
- speed2.startTime = speed1.endTime;
- speed2.endTime = speed2.startTime + 0.5;
- speed2.speedLevel = SPEED_LEVEL_SLOWEST;
- TXSpeed *speed3 =[[TXSpeed alloc] init];
- speed3.startTime = speed2.endTime;
- speed3.endTime = speed3.startTime + 0.5;
- speed3.speedLevel = SPEED_LEVEL_SLOW;
- [_ugcEdit setSpeedList:@[speed1,speed2,speed3]];
-
- [self startPlayFromTime:0 toTime:_duration];
- [self setPlayBtn:YES];
- [_videoCutView setCenterPanHidden:NO];
- [_videoCutView setCenterPanFrame:speed1.startTime];
- }
- #pragma mark PasterAddViewDelegate
- - (void)onPasterQipaoSelect:(PasterQipaoInfo *)info
- {
- [self removeAllTextFieldFromSuperView];
- int width = 170;
- int height = info.height / info.width * width;
- VideoTextFiled* videoTextField = [[VideoTextFiled alloc] initWithFrame:CGRectMake((_videoPreview.width - 170) / 2, (_videoPreview.height - 50) / 2, 170, 50)];
- [videoTextField setTextBubbleImage:info.image textNormalizationFrame:CGRectMake(info.textLeft / info.width, info.textTop / info.height, (info.width - info.textLeft - info.textRight) / info.width, (info.height - info.textTop - info.textBottom) / info.height)];
- videoTextField.frame = CGRectMake((_videoPreview.width - width) / 2, (_videoPreview.height - height) / 2, width, height);
- videoTextField.delegate = self;
- [_videoPreview addSubview:videoTextField];
-
- CGFloat percent = _duration / 10.0;
- CGFloat startTime = ([self getLastTextEndTime] == 0 ? 0 : [self getLastTextEndTime] + percent);
- if (startTime > _duration) {
- startTime = 0;
- }
- CGFloat endTime = startTime + percent;
- if(endTime > _duration){
- endTime = _duration;
- }
- VideoTextInfo* textInfo = [VideoTextInfo new];
- textInfo.textField = videoTextField;
- textInfo.startTime = startTime;
- textInfo.endTime = endTime;
- [_videoTextInfoList addObject:textInfo];
-
- [_textEffectArray insertObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"TCVideoEditView.BubbleSubtitle", nil);
- v.icon = info.iconImage;
- v;
- }) atIndex:_textEffectArray.count - 1];
- [_effectSelectView setEffectList:_textEffectArray];
- _effectSelectIndex = _textEffectArray.count - 2;
-
- [self setLeftPanFrame:startTime rightPanFrame:endTime];
- [_ugcEdit previewAtTime:endTime];
- [_videoCutView startColoration:[UIColor redColor] alpha:0.7];
- }
- - (void)onPasterAnimateSelect:(PasterAnimateInfo *)info
- {
- [self removeAllPasterViewFromSuperView];
- int width = 170;
- int height = info.height / info.width * width;
- VideoPasterView *pasterView = [[VideoPasterView alloc] initWithFrame:CGRectMake((_videoPreview.width - width) / 2, (_videoPreview.height - height) / 2, width, height)];
- pasterView.delegate = self;
- [pasterView setImageList:info.imageList imageDuration:info.duration];
- [_videoPreview addSubview:pasterView];
-
- CGFloat percent = _duration / 10.0;
- CGFloat startTime = ([self getLastPasterEndTime] == 0 ? 0 : [self getLastPasterEndTime] + percent);
- if (startTime > _duration) {
- startTime = 0;
- }
- CGFloat endTime = startTime + percent;
- if(endTime > _duration){
- endTime = _duration;
- }
- VideoPasterInfo* pasterInfo = [[VideoPasterInfo alloc] init];
- pasterInfo.pasterView = pasterView;
- pasterInfo.pasterInfoType = PasterInfoType_Animate;
- pasterInfo.path = info.path;
- pasterInfo.iconImage = info.iconImage;
- pasterInfo.startTime = startTime;
- pasterInfo.endTime = endTime;
- [_videoPasterInfoList addObject:pasterInfo];
-
- [_pasterEffectArray insertObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"PasterAddView.PasterDynamic", nil);
- v.icon = info.iconImage;
- v;
- }) atIndex:_pasterEffectArray.count - 1];
- [_effectSelectView setEffectList:_pasterEffectArray];
- _effectSelectIndex = _pasterEffectArray.count - 2;
-
- [self setLeftPanFrame:startTime rightPanFrame:endTime];
- [_ugcEdit previewAtTime:endTime];
- [_videoCutView startColoration:[UIColor redColor] alpha:0.7];
- }
- - (void)onPasterStaticSelect:(PasterStaticInfo *)info
- {
- [self removeAllPasterViewFromSuperView];
- int width = 170;
- int height = info.height / info.width * width;
- VideoPasterView *pasterView = [[VideoPasterView alloc] initWithFrame:CGRectMake((_videoPreview.width - width) / 2, (_videoPreview.height - height) / 2, width, height)];
- pasterView.delegate = self;
- [pasterView setImageList:@[info.image] imageDuration:0];
- [_videoPreview addSubview:pasterView];
-
- CGFloat percent = _duration / 10.0;
- CGFloat startTime = ([self getLastPasterEndTime] == 0 ? 0 : [self getLastPasterEndTime] + percent);
- if (startTime > _duration) {
- startTime = 0;
- }
- CGFloat endTime = startTime + percent;
- if(endTime > _duration){
- endTime = _duration;
- }
- VideoPasterInfo* pasterInfo = [[VideoPasterInfo alloc] init];
- pasterInfo.pasterView = pasterView;
- pasterInfo.pasterInfoType = PasterInfoType_static;
- pasterInfo.image = info.image;
- pasterInfo.iconImage = info.iconImage;
- pasterInfo.startTime = startTime;
- pasterInfo.endTime = endTime;
- [_videoPasterInfoList addObject:pasterInfo];
-
- [_pasterEffectArray insertObject:({
- EffectInfo * v= [EffectInfo new];
- v.name = NSLocalizedString(@"PasterAddView.PasterStatic", nil);
- v.icon = info.iconImage;
- v;
- }) atIndex:_pasterEffectArray.count - 1];
- [_effectSelectView setEffectList:_pasterEffectArray];
- _effectSelectIndex = _pasterEffectArray.count - 2;
-
- [self setLeftPanFrame:startTime rightPanFrame:endTime];
- [_ugcEdit previewAtTime:endTime];
- [_videoCutView startColoration:[UIColor redColor] alpha:0.7];
- }
- #pragma mark VideoPasterViewDelegate
- - (void)onPasterViewTap
- {
-
- }
- - (void)onRemovePasterView:(VideoPasterView*)pasterView
- {
- [pasterView removeFromSuperview];
- [self removeCurrentPasterInfo];
- }
- #pragma mark VideoTextFieldDelegate
- - (void)onBubbleTap
- {
-
- }
- - (void)onTextInputBegin
- {
- _effectConfirmBtn.enabled = NO;
- }
- - (void)onTextInputDone:(NSString*)text
- {
- _effectConfirmBtn.enabled = YES;
- }
- - (void)onRemoveTextField:(VideoTextFiled*)textField
- {
- [textField removeFromSuperview];
- [self removeCurrentTextInfo];
- }
- #pragma mark - VideoCutViewDelegate
- - (void)onVideoRangeTap:(CGFloat)tapTime
- {
- if (_effectSelectType == EffectSelectType_Paster) {
- [self removeAllPasterViewFromSuperView];
- for (VideoPasterInfo *info in _videoPasterInfoList) {
- if (tapTime >= info.startTime && tapTime <= info.endTime) {
- [_videoPreview addSubview:info.pasterView];
- [self setPlayBtn:NO];
- [_ugcEdit previewAtTime:info.startTime];
- [self setLeftPanFrame:info.startTime rightPanFrame:info.endTime];
- _effectSelectIndex = [_videoPasterInfoList indexOfObject:info];
- break;
- }
- }
- }
- else if (_effectSelectType == EffectSelectType_Text) {
- [self removeAllTextFieldFromSuperView];
- for (VideoTextInfo *info in _videoTextInfoList) {
- if (tapTime >= info.startTime && tapTime <= info.endTime) {
- [_videoPreview addSubview:info.textField];
- [self setPlayBtn:NO];
- [_ugcEdit previewAtTime:info.startTime];
- [self setLeftPanFrame:info.startTime rightPanFrame:info.endTime];
- _effectSelectIndex = [_videoTextInfoList indexOfObject:info];
- break;
- }
- }
- }
- }
- - (void)onVideoRangeLeftChanged:(VideoRangeSlider *)sender
- {
- [self setPlayBtn:NO];
- [_ugcEdit previewAtTime:sender.leftPos];
- }
- - (void)onVideoRangeLeftChangeEnded:(VideoRangeSlider *)sender
- {
- if (_effectSelectType == EffectSelectType_Paster) {
- VideoPasterInfo *info = _videoPasterInfoList[_effectSelectIndex];
- info.startTime = sender.leftPos;
- }
- else if (_effectSelectType == EffectSelectType_Text) {
- VideoTextInfo *info = _videoTextInfoList[_effectSelectIndex];
- info.startTime = sender.leftPos;
- }
- }
- - (void)onVideoRangeRightChanged:(VideoRangeSlider *)sender
- {
- [self setPlayBtn:NO];
- [_ugcEdit previewAtTime:sender.rightPos];
- }
- - (void)onVideoRangeRightChangeEnded:(VideoRangeSlider *)sender
- {
- if (_effectSelectType == EffectSelectType_Paster) {
- VideoPasterInfo *info = _videoPasterInfoList[_effectSelectIndex];
- info.endTime = sender.rightPos;
- }
- else if (_effectSelectType == EffectSelectType_Text) {
- VideoTextInfo *info = _videoTextInfoList[_effectSelectIndex];
- info.endTime = sender.rightPos;
- }
- }
- - (void)onVideoRangeCenterChanged:(VideoRangeSlider*)sender
- {
- [self setPlayBtn:NO];
- [_ugcEdit previewAtTime:sender.centerPos];
- }
- - (void)onVideoRangeCenterChangeEnded:(VideoRangeSlider*)sender;
- {
- if (_timeType == TimeType_Repeat) {
- TXRepeat *repeat = [[TXRepeat alloc] init];
- repeat.startTime = sender.centerPos;
- repeat.endTime = sender.centerPos + 0.5;
- repeat.repeatTimes = 3;
- [_ugcEdit setRepeatPlay:@[repeat]];
- [_ugcEdit setSpeedList:nil];
- }
- else if (_timeType == TimeType_Speed) {
- TXSpeed *speed1 =[[TXSpeed alloc] init];
- speed1.startTime = sender.centerPos;;
- speed1.endTime = speed1.startTime + 0.5;
- speed1.speedLevel = SPEED_LEVEL_SLOW;
- TXSpeed *speed2 =[[TXSpeed alloc] init];
- speed2.startTime = speed1.endTime;
- speed2.endTime = speed2.startTime + 0.5;
- speed2.speedLevel = SPEED_LEVEL_SLOWEST;
- TXSpeed *speed3 =[[TXSpeed alloc] init];
- speed3.startTime = speed2.endTime;
- speed3.endTime = speed3.startTime + 0.5;
- speed3.speedLevel = SPEED_LEVEL_SLOW;
- [_ugcEdit setSpeedList:@[speed1,speed2,speed3]];
- [_ugcEdit setRepeatPlay:nil];
- }
-
- if (_isReverse) {
- [self startPlayFromTime:0 toTime:sender.centerPos + 1.5];
- }else{
- [self startPlayFromTime:sender.centerPos toTime:_duration];
- }
- [self setPlayBtn:YES];
- }
- - (void)onVideoSeekChange:(VideoRangeSlider *)sender seekToPos:(CGFloat)pos
- {
- _playTime = pos;
- _timeLabel.text = [NSString stringWithFormat:@"%02d:%02d",(int)_playTime / 60 , (int)_playTime % 60];
- [_ugcEdit previewAtTime:_playTime];
- [self setPlayBtn:NO];
- }
- #pragma mark - TCFilterSettingViewDelegate
- //美颜
- - (void)onSetBeautyDepth:(float)beautyDepth WhiteningDepth:(float)whiteningDepth
- {
- [_ugcEdit setBeautyFilter:beautyDepth setWhiteningLevel:whiteningDepth];
- }
- #pragma mark TCBGMControllerListener
- -(void) onBGMControllerPlay:(NSObject*) path
- {
- if (path == nil) {
- _bottomBar.hidden = NO;
- [self resetConfirmBtn];
- [self startPlayFromTime:0 toTime:_duration];
- [self setPlayBtn:YES];
- return;
- }else{
- _BGMPath = path;
- }
- __weak __typeof(self) ws = self;
- if([_BGMPath isKindOfClass:[NSString class]]){
- _BGMDuration = [TXVideoInfoReader getVideoInfo:(NSString *)_BGMPath].duration;
- [_ugcEdit setBGM:(NSString *)_BGMPath result:^(int result) {
- if (result == 0) {
- [ws setBGMStartTime:0 endTime:MAXFLOAT];
- }
- }];
- }else{
- _BGMDuration = [TXVideoInfoReader getVideoInfoWithAsset:(AVAsset *)_BGMPath].duration;
- [_ugcEdit setBGMAsset:(AVAsset *)_BGMPath result:^(int result) {
- if (result == 0) {
- [ws setBGMStartTime:0 endTime:MAXFLOAT];
- }
- }];
- }
- }
- - (void)setBGMStartTime:(CGFloat)startTime endTime:(CGFloat)endTime
- {
- if (!_BGMPath ) return;
- if (endTime == MAXFLOAT) {
- endTime = _BGMDuration;
- }
- dispatch_async(dispatch_get_main_queue(), ^{
- [_ugcEdit setBGMStartTime:startTime endTime:endTime];
- [_ugcEdit setBGMVolume:_BGMVolume];
- [_ugcEdit setVideoVolume:_videoVolume];
- [self startPlayFromTime:0 toTime:_duration];
- [self setPlayBtn:YES];
- _musicView.hidden = NO;
- _bottomBar.hidden = YES;
- [self resetConfirmBtn];
- });
- }
- #pragma mark VideoRecordMusicViewDelegate
- -(void)onBtnMusicSelected
- {
- [self resetVideoProgress];
- // UINavigationController *nv = [[UINavigationController alloc] initWithRootViewController:_bgmListVC];
- // [nv.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
- // nv.navigationBar.barTintColor = RGB(25, 29, 38);
- // [self presentViewController:nv animated:YES completion:nil];
- // [_bgmListVC loadBGMList];
- [self presetTonew_bgmList];
- }
- -(void)onBtnMusicStoped
- {
- _BGMPath = nil;
- [_ugcEdit setBGM:nil result:^(int result) {
-
- }];
- _musicView.hidden = YES;
- _bottomBar.hidden = NO;
- [self resetConfirmBtn];
- [self startPlayFromTime:0 toTime:_duration];
- }
- -(void)onBGMValueChange:(CGFloat)percent
- {
- _BGMVolume = 1.0 * percent;
- [_ugcEdit setBGMVolume:_BGMVolume];
- }
- -(void)onVoiceValueChange:(CGFloat)percent
- {
- _videoVolume = 1.0 * percent;
- [_ugcEdit setVideoVolume:_videoVolume];
- }
- -(void)onBGMRangeChange:(CGFloat)startPercent endPercent:(CGFloat)endPercent
- {
- [self setBGMStartTime:_BGMDuration * startPercent endTime:_BGMDuration * endPercent];
- }
- #pragma mark UIAlertViewDelegate
- - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
- {
- if (buttonIndex == 1) {
- [self onHideEffectView];
- [self clearEffect];
- }
- }
- #pragma mark - Utils
- - (void)checkVideoOutputPath
- {
- NSFileManager *manager = [[NSFileManager alloc] init];
- if ([manager fileExistsAtPath:_videoOutputPath]) {
- BOOL success = [manager removeItemAtPath:_videoOutputPath error:nil];
- if (success) {
- NSLog(@"Already exist. Removed!");
- }
- }
- }
- - (float) heightForString:(UITextView *)textView andWidth:(float)width{
- CGSize sizeToFit = [textView sizeThatFits:CGSizeMake(width, MAXFLOAT)];
- return sizeToFit.height;
- }
- - (void) toastTip:(NSString*)toastInfo
- {
- CGRect frameRC = [[UIScreen mainScreen] bounds];
- frameRC.origin.y = frameRC.size.height - 110;
- frameRC.size.height -= 110;
- __block UITextView * toastView = [[UITextView alloc] init];
-
- toastView.editable = NO;
- toastView.selectable = NO;
-
- frameRC.size.height = [self heightForString:toastView andWidth:frameRC.size.width];
-
- toastView.frame = frameRC;
-
- toastView.text = toastInfo;
- toastView.backgroundColor = [UIColor whiteColor];
- toastView.alpha = 0.5;
-
- [self.view addSubview:toastView];
-
- dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC);
-
- dispatch_after(popTime, dispatch_get_main_queue(), ^(){
- [toastView removeFromSuperview];
- toastView = nil;
- });
- }
- -(NSString *)getCoverPath:(UIImage *)coverImage
- {
- UIImage *image = coverImage;
- if (image == nil) {
- return nil;
- }
-
- NSString *coverPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"TXUGC"];
- coverPath = [coverPath stringByAppendingPathComponent:[self getFileNameByTimeNow:@"TXUGC" fileType:@"jpg"]];
- if (coverPath) {
- // 保证目录存在
- [[NSFileManager defaultManager] createDirectoryAtPath:[coverPath stringByDeletingLastPathComponent]
- withIntermediateDirectories:YES
- attributes:nil
- error:nil];
-
- [UIImageJPEGRepresentation(image, 1.0) writeToFile:coverPath atomically:YES];
- }
- return coverPath;
- }
- -(NSString *)getFileNameByTimeNow:(NSString *)type fileType:(NSString *)fileType {
- NSTimeInterval now = [[NSDate date] timeIntervalSince1970];
- NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
- [formatter setDateFormat:@"yyyyMMdd_HHmmss"];
- NSDate * NowDate = [NSDate dateWithTimeIntervalSince1970:now];
- ;
- NSString * timeStr = [formatter stringFromDate:NowDate];
- NSString *fileName = ((fileType == nil) ||
- (fileType.length == 0)
- ) ? [NSString stringWithFormat:@"%@_%@",type,timeStr] : [NSString stringWithFormat:@"%@_%@.%@",type,timeStr,fileType];
- return fileName;
- }
- - (BGOssManager *)ossmanger
- {
- if (!_ossmanger)
- {
- _ossmanger =[[BGOssManager alloc]initWithDelegate:self];
- }
- return _ossmanger;
- }
- - (void)uploadImageWithUrlStr:(NSString *)imageUrlStr withUploadStateCount:(int)stateCount
- {
-
- }
- - (void)dealloc
- {
- [_videoPreview removeNotification];
- _videoPreview = nil;
- }
- @end
|