TCVideoCutView.m 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. //
  2. // TCVideoCutView.m
  3. // DeviceManageIOSApp
  4. //
  5. // Created by rushanting on 2017/5/11.
  6. // Copyright © 2017年 tencent. All rights reserved.
  7. //
  8. #import "TCVideoCutView.h"
  9. #import "TCVideoRangeConst.h"
  10. #import "TCVideoRangeSlider.h"
  11. #import "ColorMacro.h"
  12. //#import "UIView+AdditionsX12.h"
  13. #import <TXLiteAVSDK_Professional/TXVideoEditer.h>
  14. @interface TCVideoCutView ()<TCVideoRangeSliderDelegate>
  15. @end
  16. @implementation TCVideoCutView
  17. {
  18. // UILabel* _cutTipLabel;
  19. // NSMutableArray *_imageList;
  20. // CGFloat _duration;
  21. // UILabel *_timeTipsLabel;
  22. // NSString* _videoPath;
  23. // AVAsset* _videoAssert;
  24. //
  25. // UIButton* _speedUpBtn;
  26. // BOOL _isSpeedUp;
  27. //
  28. // UILabel* _speedTipLabel;
  29. // UISlider* _speedUpSlider;
  30. // UILabel* _speedLabel;
  31. CGFloat _duration; //视频时长
  32. UILabel* _timeTipsLabel; //当前播放时间显示
  33. NSString* _videoPath; //视频路径
  34. AVAsset* _videoAssert;
  35. UIButton* _effectDeleteBtn;
  36. UILabel * _cutTipsLabel;
  37. BOOL _isContinue;
  38. }
  39. - (id)initWithFrame:(CGRect)frame videoPath:(NSString *)videoPath videoAssert:(AVAsset *)videoAssert
  40. {
  41. if (self = [super initWithFrame:frame]) {
  42. _videoPath = videoPath;
  43. _videoAssert = videoAssert;
  44. _timeTipsLabel = [[UILabel alloc] init];
  45. _timeTipsLabel.text = @"0 s";
  46. _timeTipsLabel.textAlignment = NSTextAlignmentCenter;
  47. _timeTipsLabel.font = [UIFont systemFontOfSize:14];
  48. _timeTipsLabel.textColor = [UIColor whiteColor];//UIColorFromRGB(0x777777);
  49. [self addSubview:_timeTipsLabel];
  50. _videoRangeSlider = [[TCVideoRangeSlider alloc] init];
  51. [self addSubview:_videoRangeSlider];
  52. CGFloat width = 42 * 0.7 * kScaleX;
  53. CGFloat height = 32 * 0.7 * kScaleY;
  54. _effectDeleteBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  55. [_effectDeleteBtn setBackgroundImage:[UIImage imageNamed:@"effectDelete"] forState:UIControlStateNormal];
  56. _effectDeleteBtn.titleLabel.textColor = [UIColor redColor];
  57. _effectDeleteBtn.frame = CGRectMake(self.width - width - 20 * kScaleX, 10 * kScaleY, width, height);
  58. [_effectDeleteBtn addTarget:self action:@selector(onEffectDelete) forControlEvents:UIControlEventTouchUpInside];
  59. _effectDeleteBtn.hidden = YES;
  60. [self addSubview:_effectDeleteBtn];
  61. _cutTipsLabel = [[UILabel alloc] init];
  62. _cutTipsLabel.text = YZMsg(@"请选择视频的剪裁区域");
  63. _cutTipsLabel.font = [UIFont systemFontOfSize:14];
  64. _cutTipsLabel.textAlignment = NSTextAlignmentCenter;
  65. [self addSubview:_cutTipsLabel];
  66. TXVideoInfo *videoMsg = [TXVideoInfoReader getVideoInfoWithAsset:_videoAssert];
  67. _duration = videoMsg.duration;
  68. //显示微缩图列表
  69. _imageList = [NSMutableArray new];
  70. int imageNum = 12;
  71. _isContinue = YES;
  72. [TXVideoInfoReader getSampleImages:imageNum videoAsset:_videoAssert progress:^BOOL(int number, UIImage *image) {
  73. if (!_isContinue || !image) {
  74. return NO;
  75. }else{
  76. dispatch_async(dispatch_get_main_queue(), ^{
  77. if (!_isContinue) {
  78. return;
  79. }
  80. if (number == 1) {
  81. _videoRangeSlider.delegate = self;
  82. for (int i = 0; i < imageNum; i++) {
  83. [_imageList addObject:image];
  84. }
  85. [_videoRangeSlider setImageList:_imageList];
  86. [_videoRangeSlider setDurationMs:_duration];
  87. } else {
  88. if (_imageList.count == 0) {
  89. _videoRangeSlider.delegate = self;
  90. for (int i = 0; i < imageNum; i++) {
  91. [_imageList addObject:image];
  92. }
  93. [_videoRangeSlider setImageList:_imageList];
  94. [_videoRangeSlider setDurationMs:_duration];
  95. }
  96. _imageList[number-1] = image;
  97. [_videoRangeSlider updateImage:image atIndex:number-1];
  98. }
  99. });
  100. return YES;
  101. }
  102. }];
  103. }
  104. return self;
  105. }
  106. - (void)stopGetImageList
  107. {
  108. _isContinue = NO;
  109. }
  110. - (void)layoutSubviews
  111. {
  112. [super layoutSubviews];
  113. _timeTipsLabel.frame = CGRectMake(self.width / 2 - 30 * kScaleX, 0, 60 * kScaleX, 20 * kScaleY);
  114. _videoRangeSlider.frame = CGRectMake(0, _timeTipsLabel.bottom, self.width, MIDDLE_LINE_HEIGHT);
  115. }
  116. - (void)dealloc
  117. {
  118. NSLog(@"VideoCutView dealloc");
  119. }
  120. - (void)setPlayTime:(CGFloat)time
  121. {
  122. _videoRangeSlider.currentPos = time;
  123. _timeTipsLabel.text = [NSString stringWithFormat:@"%.2f s",time];
  124. }
  125. - (void)setCenterPanHidden:(BOOL)isHidden
  126. {
  127. [_videoRangeSlider setCenterPanHidden:isHidden];
  128. }
  129. - (void)setCenterPanFrame:(CGFloat)time
  130. {
  131. [_videoRangeSlider setCenterPanFrame:time];
  132. }
  133. - (void)setEffectDeleteBtnHidden:(BOOL)isHidden
  134. {
  135. [_effectDeleteBtn setHidden:isHidden];
  136. }
  137. - (void)startColoration:(UIColor *)color alpha:(CGFloat)alpha
  138. {
  139. [_videoRangeSlider startColoration:color alpha:alpha];
  140. }
  141. - (void)stopColoration
  142. {
  143. [_videoRangeSlider stopColoration];
  144. }
  145. - (void)removeLastColoration
  146. {
  147. [_videoRangeSlider removeLastColoration];
  148. }
  149. - (void)onEffectDelete
  150. {
  151. [self removeLastColoration];
  152. [self.delegate onEffectDelete];
  153. }
  154. #pragma mark - VideoRangeDelegate
  155. //左拉
  156. - (void)onVideoRangeLeftChanged:(TCVideoRangeSlider *)sender
  157. {
  158. [self.delegate onVideoLeftCutChanged:sender];
  159. }
  160. - (void)onVideoRangeLeftChangeEnded:(TCVideoRangeSlider *)sender
  161. {
  162. _videoRangeSlider.currentPos = sender.leftPos;
  163. _timeTipsLabel.text = [NSString stringWithFormat:@"%.2f s",sender.leftPos];
  164. [self.delegate onVideoCutChangedEnd:sender];
  165. }
  166. //中拉
  167. - (void)onVideoRangeCenterChanged:(TCVideoRangeSlider *)sender
  168. {
  169. [self.delegate onVideoCenterRepeatChanged:sender];
  170. }
  171. - (void)onVideoRangeCenterChangeEnded:(TCVideoRangeSlider *)sender
  172. {
  173. [self.delegate onVideoCenterRepeatEnd:sender];
  174. }
  175. //右拉
  176. - (void)onVideoRangeRightChanged:(TCVideoRangeSlider *)sender {
  177. [self.delegate onVideoRightCutChanged:sender];
  178. }
  179. - (void)onVideoRangeRightChangeEnded:(TCVideoRangeSlider *)sender
  180. {
  181. _videoRangeSlider.currentPos = sender.leftPos;
  182. _timeTipsLabel.text = [NSString stringWithFormat:@"%.2f s",sender.leftPos];
  183. [self.delegate onVideoCutChangedEnd:sender];
  184. }
  185. - (void)onVideoRangeLeftAndRightChanged:(TCVideoRangeSlider *)sender {
  186. }
  187. //拖动缩略图条
  188. - (void)onVideoRange:(TCVideoRangeSlider *)sender seekToPos:(CGFloat)pos {
  189. _timeTipsLabel.text = [NSString stringWithFormat:@"%.2f s",pos];
  190. [self.delegate onVideoCutChange:sender seekToPos:pos];
  191. }
  192. @end