UGCKitVideoRecordMusicView.m 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. // Copyright (c) 2019 Tencent. All rights reserved.
  2. #import "UGCKitVideoRecordMusicView.h"
  3. #import "UGCKitColorMacro.h"
  4. #import "UGCKit_UIViewAdditions.h"
  5. #import "UGCKitBGMSliderCutView.h"
  6. #import <UIKit/UIKit.h>
  7. #define L(x) [_theme localizedString:x]
  8. @interface UGCKitVideoRecordMusicView() <BGMCutDelegate>{
  9. }
  10. @end
  11. @implementation UGCKitVideoRecordMusicView
  12. {
  13. UISlider *_sldVolumeForBGM;
  14. UISlider *_sldVolumeForVoice;
  15. UGCKitBGMSliderCutView* _musicCutSlider;
  16. UILabel* _startTimeLabel;
  17. UGCKitBGMSliderCutViewConfig* sliderConfig;
  18. UIScrollView* _audioScrollView;
  19. UIScrollView* _audioScrollView2;
  20. UGCKitTheme *_theme;
  21. }
  22. -(instancetype)initWithFrame:(CGRect)frame needEffect:(BOOL)needEffect theme:(UGCKitTheme *)theme
  23. {
  24. self = [super initWithFrame:frame];
  25. if (self) {
  26. _theme = theme;
  27. [self initUI:needEffect];
  28. }
  29. return self;
  30. }
  31. -(void)initUI:(BOOL)needEffect{
  32. self.backgroundColor = [UIColor clearColor];
  33. //BGM
  34. UIButton *btnSelectBGM = [[UIButton alloc] initWithFrame:CGRectMake(15, 5, 30, 30)];
  35. [btnSelectBGM setImage:_theme.recordSwitchCameraIcon forState:UIControlStateNormal];
  36. [btnSelectBGM addTarget:self action:@selector(onBtnMusicSelected) forControlEvents:UIControlEventTouchUpInside];
  37. btnSelectBGM.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
  38. UIButton *btnStopBGM = [[UIButton alloc] initWithFrame:CGRectMake(btnSelectBGM.ugckit_width + 30, 5, 30, 30)];
  39. [btnStopBGM setImage:_theme.recordMusicDeleteIcon forState:UIControlStateNormal];
  40. [btnStopBGM addTarget:self action:@selector(onBtnMusicStoped) forControlEvents:UIControlEventTouchUpInside];
  41. btnStopBGM.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
  42. UILabel *labVolumeForVoice = [[UILabel alloc] initWithFrame:CGRectMake(15, btnSelectBGM.ugckit_bottom + 10, 80, 16)];
  43. [labVolumeForVoice setText:L(@"UGCKit.AudioEffect.VolumeRecord")];
  44. [labVolumeForVoice setFont:[UIFont systemFontOfSize:14.f]];
  45. labVolumeForVoice.textColor = UIColorFromRGB(0xFFFFFF);
  46. [labVolumeForVoice sizeToFit];
  47. _sldVolumeForVoice = [[UISlider alloc] initWithFrame:CGRectMake(labVolumeForVoice.ugckit_left, labVolumeForVoice.ugckit_bottom + 10,self.ugckit_width - 30, 20)];
  48. _sldVolumeForVoice.minimumValue = 0;
  49. _sldVolumeForVoice.maximumValue = 2;
  50. _sldVolumeForVoice.value = 1;
  51. _sldVolumeForVoice.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  52. [_sldVolumeForVoice setThumbImage:_theme.sliderThumbImage forState:UIControlStateNormal];
  53. [_sldVolumeForVoice setMinimumTrackTintColor:_theme.sliderMinColor]; // RGB(238, 100, 85)];
  54. [_sldVolumeForVoice addTarget:self action:@selector(onVoiceValueChange:) forControlEvents:UIControlEventValueChanged];
  55. UILabel *labVolumeForBGM = [[UILabel alloc] initWithFrame:CGRectMake(labVolumeForVoice.ugckit_left, _sldVolumeForVoice.ugckit_bottom + 20 , 80 , 16)];
  56. [labVolumeForBGM setText:L(@"UGCKit.AudioEffect.VolumeBGM")];
  57. [labVolumeForBGM sizeToFit];
  58. [labVolumeForBGM setFont:[UIFont systemFontOfSize:14.f]];
  59. labVolumeForBGM.textColor = UIColorFromRGB(0xFFFFFF);
  60. _sldVolumeForBGM = [[UISlider alloc] initWithFrame:CGRectMake(labVolumeForVoice.ugckit_left, labVolumeForBGM.ugckit_bottom + 10,self.ugckit_width - 30, 20)];
  61. _sldVolumeForBGM.minimumValue = 0;
  62. _sldVolumeForBGM.maximumValue = 2;
  63. _sldVolumeForBGM.value = 1;
  64. _sldVolumeForBGM.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  65. [_sldVolumeForBGM setThumbImage:_theme.sliderThumbImage forState:UIControlStateNormal];
  66. [_sldVolumeForBGM setMinimumTrackTintColor:_theme.sliderMinColor];
  67. [_sldVolumeForBGM addTarget:self action:@selector(onBGMValueChange:) forControlEvents:UIControlEventValueChanged];
  68. _startTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(15,_sldVolumeForBGM.ugckit_bottom + 20,200,16)];
  69. [_startTimeLabel setTextColor:[UIColor whiteColor]];
  70. [_startTimeLabel setFont:[UIFont systemFontOfSize:14.f]];
  71. [_startTimeLabel setText:[NSString stringWithFormat:L(@"UGCKit.AudioEffect.StartFrom"),[UGCKitBGMSliderCutView timeString:0]]];
  72. [self addSubview:btnSelectBGM];
  73. [self addSubview:btnStopBGM];
  74. [self addSubview:labVolumeForBGM];
  75. [self addSubview:_sldVolumeForBGM];
  76. [self addSubview:labVolumeForVoice];
  77. [self addSubview:_sldVolumeForVoice];
  78. [self addSubview:_startTimeLabel];
  79. [self freshCutView:150];
  80. }
  81. - (void)_freshCutView:(CGFloat)duration {
  82. [_musicCutSlider removeFromSuperview];
  83. //1.thumbHeight + 2* borderHeight =_musicCutSlider.frame.y;
  84. //2._musicCutSlider.frame.y目前只支持40
  85. sliderConfig = [[UGCKitBGMSliderCutViewConfig alloc] initWithTheme:_theme];;
  86. sliderConfig.duration = duration;
  87. sliderConfig.frame = CGRectMake(15, _startTimeLabel.ugckit_bottom + 10, self.ugckit_width - 30, 54);
  88. _musicCutSlider = [[UGCKitBGMSliderCutView alloc] initWithImage:_theme.recordMusicSampleImage config:sliderConfig];
  89. _musicCutSlider.delegate = self;
  90. [self addSubview:_musicCutSlider];
  91. }
  92. -(void) freshCutView:(CGFloat) duration{
  93. dispatch_async(dispatch_get_main_queue(), ^(){
  94. [self _freshCutView:duration];
  95. });
  96. }
  97. -(void)onBtnMusicSelected
  98. {
  99. if (_delegate && [_delegate respondsToSelector:@selector(onBtnMusicSelected)]) {
  100. [_delegate onBtnMusicSelected];
  101. }
  102. }
  103. -(void) resetCutView{
  104. [_musicCutSlider resetCutView];
  105. }
  106. -(void)onBtnMusicStoped
  107. {
  108. if (_delegate && [_delegate respondsToSelector:@selector(onBtnMusicStoped)]) {
  109. [_delegate onBtnMusicStoped];
  110. }
  111. }
  112. -(void)onBGMValueChange:(UISlider*)slider
  113. {
  114. if (_delegate && [_delegate respondsToSelector:@selector(onBGMValueChange:)]) {
  115. [_delegate onBGMValueChange:slider.value];
  116. }
  117. }
  118. -(void)onVoiceValueChange:(UISlider*)slider
  119. {
  120. if (_delegate && [_delegate respondsToSelector:@selector(onVoiceValueChange:)]) {
  121. [_delegate onVoiceValueChange:slider.value];
  122. }
  123. }
  124. #pragma mark - RangeContentDelegate
  125. - (void)onRangeLeftChanged:(UGCKitBGMSliderCutView*)sender percent:(CGFloat)percent{
  126. if(sliderConfig){
  127. [_startTimeLabel setText:[NSString stringWithFormat:L(@"UGCKit.AudioEffect.StartFrom"),[UGCKitBGMSliderCutView timeString:percent*sliderConfig.duration]]];
  128. }
  129. else{
  130. [_startTimeLabel setText:[NSString stringWithFormat:L(@"UGCKit.AudioEffect.StartFrom"),[UGCKitBGMSliderCutView timeString:0]]];
  131. }
  132. }
  133. - (void)onRangeLeftChangeEnded:(UGCKitBGMSliderCutView*)sender percent:(CGFloat)percent
  134. {
  135. // NSLog(@"end:%f",percent*sliderConfig.duration);
  136. if (_delegate && [_delegate respondsToSelector:@selector(onBGMRangeChange:endPercent:)]) {
  137. [_delegate onBGMRangeChange:_musicCutSlider.leftScale endPercent:_musicCutSlider.rightScale];
  138. }
  139. }
  140. - (void)onRangeRightChangeEnded:(id)sender
  141. {
  142. // NSLog(@"left:%f right:%f",_musicCutSlider.leftScale, _musicCutSlider.rightScale);
  143. if (_delegate && [_delegate respondsToSelector:@selector(onBGMRangeChange:endPercent:)]) {
  144. [_delegate onBGMRangeChange:_musicCutSlider.leftScale endPercent:_musicCutSlider.rightScale];
  145. }
  146. }
  147. -(void)resetVolume
  148. {
  149. _sldVolumeForBGM.value = 1;
  150. _sldVolumeForVoice.value = 1;
  151. }
  152. @end