KSPlayerSliderView.m 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. //
  2. // KSPlayerSliderView.m
  3. // KulexiuSchoolStudent
  4. //
  5. // Created by 王智 on 2023/8/29.
  6. //
  7. #import "KSPlayerSliderView.h"
  8. #import "UIView+KSCovertImage.h"
  9. @interface KSPlayerSliderView ()<UIGestureRecognizerDelegate>
  10. @property (weak, nonatomic) IBOutlet UIButton *stautusButton;
  11. @property (weak, nonatomic) IBOutlet UISlider *progressSlider;
  12. @property (weak, nonatomic) IBOutlet UILabel *playTime;
  13. @property (weak, nonatomic) IBOutlet UILabel *fullTime;
  14. @property (nonatomic, copy) KSPlayerSliderActionCallback callback;
  15. @property (nonatomic, assign) NSInteger totalDuration;
  16. //是否正在拖曳进度条
  17. @property (nonatomic,assign) BOOL isDragingSlider;
  18. //视频进度条的单击手势&播放器的单击手势
  19. @property (nonatomic,strong) UITapGestureRecognizer *progressTap;
  20. @property (nonatomic, assign) BOOL isWhite;
  21. @end
  22. @implementation KSPlayerSliderView
  23. - (void)configViewDisplayColor:(BOOL)isWhite {
  24. self.isWhite = isWhite;
  25. if (isWhite) {
  26. UIView *sliderImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 12, 12)];
  27. sliderImg.layer.cornerRadius = 6.0f;
  28. sliderImg.layer.masksToBounds = YES;
  29. sliderImg.backgroundColor = HexRGB(0xffffff);
  30. UIImage *image = [UIView convertViewToImage:sliderImg];
  31. [self.progressSlider setThumbImage:image forState:UIControlStateNormal];
  32. [self.progressSlider setThumbImage:image forState:UIControlStateHighlighted];
  33. [self.progressSlider setMinimumTrackTintColor:HexRGB(0xffffff)];
  34. [self.progressSlider setMaximumTrackTintColor:HexRGBAlpha(0xffffff, 0.3f)];
  35. self.playTime.textColor = HexRGB(0xffffff);
  36. self.fullTime.textColor = HexRGB(0xffffff);
  37. }
  38. else {
  39. UIView *sliderImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 12, 12)];
  40. sliderImg.layer.cornerRadius = 6.0f;
  41. sliderImg.layer.masksToBounds = YES;
  42. sliderImg.backgroundColor = HexRGB(0x2DC7AA);
  43. UIImage *image = [UIView convertViewToImage:sliderImg];
  44. [self.progressSlider setThumbImage:image forState:UIControlStateNormal];
  45. [self.progressSlider setThumbImage:image forState:UIControlStateHighlighted];
  46. [self.progressSlider setMinimumTrackTintColor:HexRGB(0x2DC7AA)];
  47. [self.progressSlider setMaximumTrackTintColor:HexRGB(0xffffff)];
  48. self.playTime.textColor = HexRGB(0x131415);
  49. self.fullTime.textColor = HexRGB(0x131415);
  50. }
  51. self.isPlay = NO;
  52. }
  53. - (void)awakeFromNib {
  54. [super awakeFromNib];
  55. self.playScheduleTime = 0;
  56. //进度条的拖拽事件
  57. [self.progressSlider addTarget:self action:@selector(stratDragSlide:) forControlEvents:UIControlEventValueChanged];
  58. //进度条的点击事件
  59. [self.progressSlider addTarget:self action:@selector(updateProgress:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];
  60. //给进度条添加单击手势
  61. self.progressTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionTapGesture:)];
  62. self.progressTap.delegate = self;
  63. [self.progressSlider addGestureRecognizer:self.progressTap];
  64. }
  65. + (instancetype)shareInstance {
  66. KSPlayerSliderView *view = [[[NSBundle mainBundle] loadNibNamed:@"KSPlayerSliderView" owner:nil options:nil] firstObject];
  67. return view;
  68. }
  69. - (void)configWithDuration:(NSInteger)totalDuration {
  70. self.totalDuration = totalDuration;
  71. self.progressSlider.minimumValue = 0;
  72. self.progressSlider.maximumValue = totalDuration;
  73. }
  74. - (void)sliderControlAction:(KSPlayerSliderActionCallback)callback {
  75. if (callback) {
  76. self.callback = callback;
  77. }
  78. }
  79. - (IBAction)playButtonAction:(id)sender {
  80. self.isPlay = !self.isPlay;
  81. if (self.callback) {
  82. PLAYERTYPE type = self.isPlay ? PLAYERTYPE_PLAY : PLAYERTYPE_PAUSE;
  83. self.callback(type, self.playScheduleTime);
  84. }
  85. }
  86. #pragma mark--开始拖曳sidle
  87. - (void)stratDragSlide:(UISlider *)slider{
  88. self.isDragingSlider = YES;
  89. }
  90. #pragma mark
  91. #pragma mark - 播放进度
  92. - (void)updateProgress:(UISlider *)slider {
  93. self.playScheduleTime = slider.value;
  94. self.isDragingSlider = NO;
  95. if (self.callback) {
  96. self.callback(PLAYERTYPE_RATE, self.playScheduleTime);
  97. }
  98. }
  99. //视频进度条的点击事件
  100. - (void)actionTapGesture:(UITapGestureRecognizer *)sender {
  101. CGPoint touchLocation = [sender locationInView:self.progressSlider];
  102. CGFloat value = (self.progressSlider.maximumValue - self.progressSlider.minimumValue) * (touchLocation.x/self.progressSlider.frame.size.width);
  103. [self.progressSlider setValue:value animated:YES];
  104. [self configScheduleTime:self.progressSlider.value];
  105. if (self.callback) {
  106. self.callback(PLAYERTYPE_RATE, self.playScheduleTime);
  107. }
  108. }
  109. - (void)configScheduleTime:(NSInteger)playTime {
  110. _playScheduleTime = playTime;
  111. self.playTime.text = [NSString stringWithFormat:@"%.2d:%.2d", (int)(playTime/1000) / 60, (int)(playTime/1000) % 60];
  112. }
  113. - (void)setIsPlay:(BOOL)isPlay {
  114. _isPlay = isPlay;
  115. NSString *imgName = @"";
  116. if (isPlay) {
  117. imgName = self.isWhite ? @"mergePlayer_pause_white" : @"mergePlayer_pause";
  118. }
  119. else {
  120. imgName = self.isWhite ? @"mergePlayer_play_white" : @"mergePlayer_play";
  121. }
  122. [self.stautusButton setImage:[UIImage imageNamed:imgName] forState:UIControlStateNormal];
  123. }
  124. - (void)setTotalDuration:(NSInteger)totalDuration {
  125. _totalDuration = totalDuration;
  126. self.fullTime.text = [NSString stringWithFormat:@"%.2d:%.2d", (int)(totalDuration/1000) / 60, (int)(totalDuration/1000) % 60];
  127. }
  128. - (void)setPlayScheduleTime:(NSInteger)playScheduleTime {
  129. _playScheduleTime = playScheduleTime;
  130. self.playTime.text = [NSString stringWithFormat:@"%.2d:%.2d", (int)(playScheduleTime/1000) / 60, (int)(playScheduleTime/1000) % 60];
  131. if (_isDragingSlider == NO) {
  132. self.progressSlider.value = playScheduleTime;
  133. }
  134. }
  135. /*
  136. // Only override drawRect: if you perform custom drawing.
  137. // An empty implementation adversely affects performance during animation.
  138. - (void)drawRect:(CGRect)rect {
  139. // Drawing code
  140. }
  141. */
  142. @end