| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- //
- // TCVideoCutView.m
- // DeviceManageIOSApp
- //
- // Created by rushanting on 2017/5/11.
- // Copyright © 2017年 tencent. All rights reserved.
- //
- #import "TCVideoCutView.h"
- #import "TCVideoRangeConst.h"
- #import "TCVideoRangeSlider.h"
- #import "ColorMacro.h"
- //#import "UIView+AdditionsX12.h"
- #import <TXLiteAVSDK_Professional/TXVideoEditer.h>
- @interface TCVideoCutView ()<TCVideoRangeSliderDelegate>
- @end
- @implementation TCVideoCutView
- {
- // UILabel* _cutTipLabel;
- // NSMutableArray *_imageList;
- // CGFloat _duration;
- // UILabel *_timeTipsLabel;
- // NSString* _videoPath;
- // AVAsset* _videoAssert;
- //
- // UIButton* _speedUpBtn;
- // BOOL _isSpeedUp;
- //
- // UILabel* _speedTipLabel;
- // UISlider* _speedUpSlider;
- // UILabel* _speedLabel;
- CGFloat _duration; //视频时长
- UILabel* _timeTipsLabel; //当前播放时间显示
- NSString* _videoPath; //视频路径
- AVAsset* _videoAssert;
- UIButton* _effectDeleteBtn;
- UILabel * _cutTipsLabel;
- BOOL _isContinue;
-
- }
- - (id)initWithFrame:(CGRect)frame videoPath:(NSString *)videoPath videoAssert:(AVAsset *)videoAssert
- {
- if (self = [super initWithFrame:frame]) {
- _videoPath = videoPath;
- _videoAssert = videoAssert;
-
- _timeTipsLabel = [[UILabel alloc] init];
- _timeTipsLabel.text = @"0 s";
- _timeTipsLabel.textAlignment = NSTextAlignmentCenter;
- _timeTipsLabel.font = [UIFont systemFontOfSize:14];
- _timeTipsLabel.textColor = [UIColor whiteColor];//UIColorFromRGB(0x777777);
- [self addSubview:_timeTipsLabel];
-
- _videoRangeSlider = [[TCVideoRangeSlider alloc] init];
- [self addSubview:_videoRangeSlider];
-
- CGFloat width = 42 * 0.7 * kScaleX;
- CGFloat height = 32 * 0.7 * kScaleY;
- _effectDeleteBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [_effectDeleteBtn setBackgroundImage:[UIImage imageNamed:@"effectDelete"] forState:UIControlStateNormal];
- _effectDeleteBtn.titleLabel.textColor = [UIColor redColor];
- _effectDeleteBtn.frame = CGRectMake(self.width - width - 20 * kScaleX, 10 * kScaleY, width, height);
- [_effectDeleteBtn addTarget:self action:@selector(onEffectDelete) forControlEvents:UIControlEventTouchUpInside];
- _effectDeleteBtn.hidden = YES;
- [self addSubview:_effectDeleteBtn];
-
- _cutTipsLabel = [[UILabel alloc] init];
- _cutTipsLabel.text = YZMsg(@"请选择视频的剪裁区域");
- _cutTipsLabel.font = [UIFont systemFontOfSize:14];
- _cutTipsLabel.textAlignment = NSTextAlignmentCenter;
- [self addSubview:_cutTipsLabel];
-
- TXVideoInfo *videoMsg = [TXVideoInfoReader getVideoInfoWithAsset:_videoAssert];
- _duration = videoMsg.duration;
-
- //显示微缩图列表
- _imageList = [NSMutableArray new];
- int imageNum = 12;
-
- _isContinue = YES;
- [TXVideoInfoReader getSampleImages:imageNum videoAsset:_videoAssert progress:^BOOL(int number, UIImage *image) {
- if (!_isContinue || !image) {
- return NO;
- }else{
- dispatch_async(dispatch_get_main_queue(), ^{
- if (!_isContinue) {
- return;
- }
- if (number == 1) {
- _videoRangeSlider.delegate = self;
- for (int i = 0; i < imageNum; i++) {
- [_imageList addObject:image];
- }
- [_videoRangeSlider setImageList:_imageList];
- [_videoRangeSlider setDurationMs:_duration];
- } else {
-
- if (_imageList.count == 0) {
- _videoRangeSlider.delegate = self;
- for (int i = 0; i < imageNum; i++) {
- [_imageList addObject:image];
- }
- [_videoRangeSlider setImageList:_imageList];
- [_videoRangeSlider setDurationMs:_duration];
- }
-
- _imageList[number-1] = image;
- [_videoRangeSlider updateImage:image atIndex:number-1];
- }
- });
- return YES;
- }
- }];
- }
- return self;
- }
- - (void)stopGetImageList
- {
- _isContinue = NO;
- }
- - (void)layoutSubviews
- {
- [super layoutSubviews];
-
- _timeTipsLabel.frame = CGRectMake(self.width / 2 - 30 * kScaleX, 0, 60 * kScaleX, 20 * kScaleY);
- _videoRangeSlider.frame = CGRectMake(0, _timeTipsLabel.bottom, self.width, MIDDLE_LINE_HEIGHT);
- }
- - (void)dealloc
- {
- NSLog(@"VideoCutView dealloc");
- }
- - (void)setPlayTime:(CGFloat)time
- {
- _videoRangeSlider.currentPos = time;
- _timeTipsLabel.text = [NSString stringWithFormat:@"%.2f s",time];
- }
- - (void)setCenterPanHidden:(BOOL)isHidden
- {
- [_videoRangeSlider setCenterPanHidden:isHidden];
- }
- - (void)setCenterPanFrame:(CGFloat)time
- {
- [_videoRangeSlider setCenterPanFrame:time];
- }
- - (void)setEffectDeleteBtnHidden:(BOOL)isHidden
- {
- [_effectDeleteBtn setHidden:isHidden];
- }
- - (void)startColoration:(UIColor *)color alpha:(CGFloat)alpha
- {
- [_videoRangeSlider startColoration:color alpha:alpha];
- }
- - (void)stopColoration
- {
- [_videoRangeSlider stopColoration];
- }
- - (void)removeLastColoration
- {
- [_videoRangeSlider removeLastColoration];
- }
- - (void)onEffectDelete
- {
- [self removeLastColoration];
- [self.delegate onEffectDelete];
- }
- #pragma mark - VideoRangeDelegate
- //左拉
- - (void)onVideoRangeLeftChanged:(TCVideoRangeSlider *)sender
- {
- [self.delegate onVideoLeftCutChanged:sender];
- }
- - (void)onVideoRangeLeftChangeEnded:(TCVideoRangeSlider *)sender
- {
- _videoRangeSlider.currentPos = sender.leftPos;
- _timeTipsLabel.text = [NSString stringWithFormat:@"%.2f s",sender.leftPos];
- [self.delegate onVideoCutChangedEnd:sender];
- }
- //中拉
- - (void)onVideoRangeCenterChanged:(TCVideoRangeSlider *)sender
- {
- [self.delegate onVideoCenterRepeatChanged:sender];
- }
- - (void)onVideoRangeCenterChangeEnded:(TCVideoRangeSlider *)sender
- {
- [self.delegate onVideoCenterRepeatEnd:sender];
- }
- //右拉
- - (void)onVideoRangeRightChanged:(TCVideoRangeSlider *)sender {
- [self.delegate onVideoRightCutChanged:sender];
- }
- - (void)onVideoRangeRightChangeEnded:(TCVideoRangeSlider *)sender
- {
- _videoRangeSlider.currentPos = sender.leftPos;
- _timeTipsLabel.text = [NSString stringWithFormat:@"%.2f s",sender.leftPos];
- [self.delegate onVideoCutChangedEnd:sender];
- }
- - (void)onVideoRangeLeftAndRightChanged:(TCVideoRangeSlider *)sender {
-
- }
- //拖动缩略图条
- - (void)onVideoRange:(TCVideoRangeSlider *)sender seekToPos:(CGFloat)pos {
- _timeTipsLabel.text = [NSString stringWithFormat:@"%.2f s",pos];
- [self.delegate onVideoCutChange:sender seekToPos:pos];
- }
- @end
|