| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- //
- // BGReLiveProgressView.m
- // BuguLive
- //
- // Created by xfg on 2017/2/10.
- // Copyright © 2017年 xfg. All rights reserved.
- //
- #import "BGReLiveProgressView.h"
- #define kPlayContrainerHeight 30
- static const CGFloat kBoundsMargin = 2.f;
- static const CGFloat kTimeLabelWidth = 75.f;
- static NSString * kNullTimeLabelText = @"--:--/--:--";
- static NSString * kFontName = @"Helvetica";
- @interface BGReLiveProgressView ()
- @end
- @implementation BGReLiveProgressView
- - (void)dealloc
- {
- [self removeObserver:self forKeyPath:@"cacheProgress"];
- [self removeObserver:self forKeyPath:@"playProgress"];
- }
- - (instancetype)init
- {
- self = [super init];
- if (self)
- {
- _progressView = [[UIProgressView alloc] init];
- _progressView.trackTintColor = [UIColor lightGrayColor];
- _progressView.progressTintColor = [UIColor darkGrayColor];
- [self addSubview:_progressView];
-
- _playBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [_playBtn setImage:[UIImage imageNamed:@"fw_relive_start"] forState:UIControlStateNormal];
- [_playBtn addTarget:self action:@selector(onStartOrStopPlay) forControlEvents:UIControlEventTouchUpInside];
- [self addSubview:_playBtn];
-
- _slider = [[UISlider alloc] init];
- _slider.maximumTrackTintColor = [UIColor clearColor];
- _slider.minimumValue = 0.f;
- _slider.maximumValue = 1.f;
- [_slider setThumbImage:[UIImage imageNamed:@"fw_relive_slider_thumb"] forState:UIControlStateNormal];
- _slider.minimumTrackTintColor = kWhiteColor;
- _slider.value = 0;
- _slider.continuous = NO;
- [_slider addTarget:self action:@selector(onSeekBegin) forControlEvents:(UIControlEventTouchDown)];
- [_slider addTarget:self action:@selector(dragSliderDidEnd) forControlEvents:UIControlEventTouchUpInside];
- [self addSubview:_slider];
-
- _playedTimeLabel = [self addTimeLabel];
-
- [self addObserver:self forKeyPath:@"cacheProgress" options:NSKeyValueObservingOptionNew context:nil];
- [self addObserver:self forKeyPath:@"playProgress" options:NSKeyValueObservingOptionNew context:nil];
-
- }
- return self;
- }
- - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
- {
- if ([keyPath isEqualToString:@"cacheProgress"])
- {
- [_progressView setProgress:self.cacheProgress animated:YES];
- }
- if ([keyPath isEqualToString:@"playProgress"])
- {
- [_slider setValue:self.playProgress animated:YES];
-
- _playedTimeLabel.text = [NSString stringWithFormat:@"%@/%@",[self convertToMinutes:_totalTimeInSeconds * _playProgress],[self convertToMinutes:_totalTimeInSeconds]];
- }
- }
- - (void)layoutSubviews
- {
- [super layoutSubviews];
-
- self.backgroundColor = kClearColor;
-
- _playBtn.frame = CGRectMake(kDefaultMargin, 0, kPlayContrainerHeight, kPlayContrainerHeight);
-
- _playedTimeLabel.frame = CGRectMake(self.bounds.size.width-75-kDefaultMargin, 0, kTimeLabelWidth, kPlayContrainerHeight);
-
- CGRect progressAreaFrame = CGRectMake(CGRectGetMaxX(_playBtn.frame)+kDefaultMargin, 0, self.bounds.size.width-CGRectGetWidth(_playBtn.frame)-CGRectGetWidth(_playedTimeLabel.frame)-kDefaultMargin*4, self.bounds.size.height);
-
- _progressView.frame = CGRectMake(progressAreaFrame.origin.x + kBoundsMargin,
- progressAreaFrame.size.height / 2 - kBoundsMargin / 2,
- progressAreaFrame.size.width - 2 * kBoundsMargin,
- progressAreaFrame.size.height);
-
- _slider.frame = progressAreaFrame;
- }
- - (NSString *)convertToMinutes:(float)seconds
- {
- NSString *timeStr = [NSString stringWithFormat:@"%02d:%02d", (int)seconds / 60, (int)seconds % 60];
- return timeStr;
- }
- - (UILabel *)addTimeLabel
- {
- UILabel *timeLabel = [[UILabel alloc] init];
- timeLabel.textColor = [UIColor whiteColor];
- timeLabel.font = [UIFont fontWithName:kFontName size:12];
- timeLabel.text = kNullTimeLabelText;
- timeLabel.textAlignment = NSTextAlignmentCenter;
- [self addSubview:timeLabel];
-
- return timeLabel;
- }
- - (void)onStartOrStopPlay
- {
- self.playBtnCallback();
- }
- #pragma mark 进度条事件
- - (void)onSeekBegin
- {
- NSLog(@"%f",_slider.value);
- _isStartSeekPro = YES;
- }
- - (void)dragSliderDidEnd
- {
- _isStartSeekPro = NO;
- self.dragingSliderCallback(_slider.value);
- }
- @end
|