BGReLiveProgressView.m 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //
  2. // BGReLiveProgressView.m
  3. // BuguLive
  4. //
  5. // Created by xfg on 2017/2/10.
  6. // Copyright © 2017年 xfg. All rights reserved.
  7. //
  8. #import "BGReLiveProgressView.h"
  9. #define kPlayContrainerHeight 30
  10. static const CGFloat kBoundsMargin = 2.f;
  11. static const CGFloat kTimeLabelWidth = 75.f;
  12. static NSString * kNullTimeLabelText = @"--:--/--:--";
  13. static NSString * kFontName = @"Helvetica";
  14. @interface BGReLiveProgressView ()
  15. @end
  16. @implementation BGReLiveProgressView
  17. - (void)dealloc
  18. {
  19. [self removeObserver:self forKeyPath:@"cacheProgress"];
  20. [self removeObserver:self forKeyPath:@"playProgress"];
  21. }
  22. - (instancetype)init
  23. {
  24. self = [super init];
  25. if (self)
  26. {
  27. _progressView = [[UIProgressView alloc] init];
  28. _progressView.trackTintColor = [UIColor lightGrayColor];
  29. _progressView.progressTintColor = [UIColor darkGrayColor];
  30. [self addSubview:_progressView];
  31. _playBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  32. [_playBtn setImage:[UIImage imageNamed:@"fw_relive_start"] forState:UIControlStateNormal];
  33. [_playBtn addTarget:self action:@selector(onStartOrStopPlay) forControlEvents:UIControlEventTouchUpInside];
  34. [self addSubview:_playBtn];
  35. _slider = [[UISlider alloc] init];
  36. _slider.maximumTrackTintColor = [UIColor clearColor];
  37. _slider.minimumValue = 0.f;
  38. _slider.maximumValue = 1.f;
  39. [_slider setThumbImage:[UIImage imageNamed:@"fw_relive_slider_thumb"] forState:UIControlStateNormal];
  40. _slider.minimumTrackTintColor = kWhiteColor;
  41. _slider.value = 0;
  42. _slider.continuous = NO;
  43. [_slider addTarget:self action:@selector(onSeekBegin) forControlEvents:(UIControlEventTouchDown)];
  44. [_slider addTarget:self action:@selector(dragSliderDidEnd) forControlEvents:UIControlEventTouchUpInside];
  45. [self addSubview:_slider];
  46. _playedTimeLabel = [self addTimeLabel];
  47. [self addObserver:self forKeyPath:@"cacheProgress" options:NSKeyValueObservingOptionNew context:nil];
  48. [self addObserver:self forKeyPath:@"playProgress" options:NSKeyValueObservingOptionNew context:nil];
  49. }
  50. return self;
  51. }
  52. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
  53. {
  54. if ([keyPath isEqualToString:@"cacheProgress"])
  55. {
  56. [_progressView setProgress:self.cacheProgress animated:YES];
  57. }
  58. if ([keyPath isEqualToString:@"playProgress"])
  59. {
  60. [_slider setValue:self.playProgress animated:YES];
  61. _playedTimeLabel.text = [NSString stringWithFormat:@"%@/%@",[self convertToMinutes:_totalTimeInSeconds * _playProgress],[self convertToMinutes:_totalTimeInSeconds]];
  62. }
  63. }
  64. - (void)layoutSubviews
  65. {
  66. [super layoutSubviews];
  67. self.backgroundColor = kClearColor;
  68. _playBtn.frame = CGRectMake(kDefaultMargin, 0, kPlayContrainerHeight, kPlayContrainerHeight);
  69. _playedTimeLabel.frame = CGRectMake(self.bounds.size.width-75-kDefaultMargin, 0, kTimeLabelWidth, kPlayContrainerHeight);
  70. CGRect progressAreaFrame = CGRectMake(CGRectGetMaxX(_playBtn.frame)+kDefaultMargin, 0, self.bounds.size.width-CGRectGetWidth(_playBtn.frame)-CGRectGetWidth(_playedTimeLabel.frame)-kDefaultMargin*4, self.bounds.size.height);
  71. _progressView.frame = CGRectMake(progressAreaFrame.origin.x + kBoundsMargin,
  72. progressAreaFrame.size.height / 2 - kBoundsMargin / 2,
  73. progressAreaFrame.size.width - 2 * kBoundsMargin,
  74. progressAreaFrame.size.height);
  75. _slider.frame = progressAreaFrame;
  76. }
  77. - (NSString *)convertToMinutes:(float)seconds
  78. {
  79. NSString *timeStr = [NSString stringWithFormat:@"%02d:%02d", (int)seconds / 60, (int)seconds % 60];
  80. return timeStr;
  81. }
  82. - (UILabel *)addTimeLabel
  83. {
  84. UILabel *timeLabel = [[UILabel alloc] init];
  85. timeLabel.textColor = [UIColor whiteColor];
  86. timeLabel.font = [UIFont fontWithName:kFontName size:12];
  87. timeLabel.text = kNullTimeLabelText;
  88. timeLabel.textAlignment = NSTextAlignmentCenter;
  89. [self addSubview:timeLabel];
  90. return timeLabel;
  91. }
  92. - (void)onStartOrStopPlay
  93. {
  94. self.playBtnCallback();
  95. }
  96. #pragma mark 进度条事件
  97. - (void)onSeekBegin
  98. {
  99. NSLog(@"%f",_slider.value);
  100. _isStartSeekPro = YES;
  101. }
  102. - (void)dragSliderDidEnd
  103. {
  104. _isStartSeekPro = NO;
  105. self.dragingSliderCallback(_slider.value);
  106. }
  107. @end