#import "SuperPlayerControlView.h" #import #import #import "SuperPlayerSettingsView.h" #import "DataReport.h" #import "SuperPlayerFastView.h" #import "PlayerSlider.h" #import "UIView+MMLayout.h" #import "SuperPlayerView+Private.h" #import "StrUtils.h" #import "SPDefaultControlView.h" #import "UIView+Fade.h" #pragma clang diagnostic push #pragma clang diagnostic ignored"-Wdeprecated-declarations" #define MODEL_TAG_BEGIN 20 #define BOTTOM_IMAGE_VIEW_HEIGHT 50 @interface SPDefaultControlView () @property BOOL isLive; @end @implementation SPDefaultControlView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self addSubview:self.topImageView]; [self addSubview:self.bottomImageView]; [self.bottomImageView addSubview:self.startBtn]; [self.bottomImageView addSubview:self.currentTimeLabel]; [self.bottomImageView addSubview:self.videoSlider]; [self.bottomImageView addSubview:self.resolutionBtn]; [self.bottomImageView addSubview:self.fullScreenBtn]; [self.bottomImageView addSubview:self.totalTimeLabel]; [self.topImageView addSubview:self.captureBtn]; [self.topImageView addSubview:self.danmakuBtn]; [self.topImageView addSubview:self.moreBtn]; [self addSubview:self.lockBtn]; [self.topImageView addSubview:self.backBtn]; [self addSubview:self.playeBtn]; [self.topImageView addSubview:self.titleLabel]; [self addSubview:self.backLiveBtn]; // 添加子控件的约束 [self makeSubViewsConstraints]; self.captureBtn.hidden = YES; self.danmakuBtn.hidden = YES; self.moreBtn.hidden = YES; self.resolutionBtn.hidden = YES; self.moreContentView.hidden = YES; // 初始化时重置controlView [self playerResetControlView]; } return self; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (void)makeSubViewsConstraints { [self.topImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.equalTo(self); make.top.equalTo(self.mas_top).offset(0); make.height.mas_equalTo(50); }]; [self.backBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.topImageView.mas_leading).offset(5); make.top.equalTo(self.topImageView.mas_top).offset(3); make.width.height.mas_equalTo(40); }]; [self.moreBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(40); make.height.mas_equalTo(49); make.trailing.equalTo(self.topImageView.mas_trailing).offset(-10); make.centerY.equalTo(self.backBtn.mas_centerY); }]; [self.captureBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(40); make.height.mas_equalTo(49); make.trailing.equalTo(self.moreBtn.mas_leading).offset(-10); make.centerY.equalTo(self.backBtn.mas_centerY); }]; [self.danmakuBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(40); make.height.mas_equalTo(49); make.trailing.equalTo(self.captureBtn.mas_leading).offset(-10); make.centerY.equalTo(self.backBtn.mas_centerY); }]; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.backBtn.mas_trailing).offset(5); make.centerY.equalTo(self.backBtn.mas_centerY); make.trailing.equalTo(self.captureBtn.mas_leading).offset(-10); }]; [self.bottomImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.bottom.mas_equalTo(0); make.height.mas_equalTo(BOTTOM_IMAGE_VIEW_HEIGHT); }]; [self.startBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.bottomImageView.mas_leading).offset(5); make.top.equalTo(self.bottomImageView.mas_top).offset(10); make.width.height.mas_equalTo(30); }]; [self.currentTimeLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.startBtn.mas_trailing); make.centerY.equalTo(self.startBtn.mas_centerY); make.width.mas_equalTo(60); }]; [self.fullScreenBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(30); make.trailing.equalTo(self.bottomImageView.mas_trailing).offset(-8); make.centerY.equalTo(self.startBtn.mas_centerY); }]; [self.resolutionBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(30); make.width.mas_greaterThanOrEqualTo(45); make.trailing.equalTo(self.bottomImageView.mas_trailing).offset(-8); make.centerY.equalTo(self.startBtn.mas_centerY); }]; [self.totalTimeLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.trailing.equalTo(self.fullScreenBtn.mas_leading); make.centerY.equalTo(self.startBtn.mas_centerY); make.width.mas_equalTo(60); }]; [self.videoSlider mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.currentTimeLabel.mas_trailing); make.trailing.equalTo(self.totalTimeLabel.mas_leading); make.centerY.equalTo(self.currentTimeLabel.mas_centerY).offset(-1); }]; [self.lockBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.mas_leading).offset(15); make.centerY.equalTo(self.mas_centerY); make.width.height.mas_equalTo(32); }]; [self.playeBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(50); make.center.equalTo(self); }]; [self.backLiveBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.mas_equalTo(self.startBtn.mas_top).mas_offset(-15); make.width.mas_equalTo(70); make.centerX.equalTo(self); }]; } #pragma mark - Action /** * 点击切换分别率按钮 */ - (void)changeResolution:(UIButton *)sender { self.resoultionCurrentBtn.selected = NO; self.resoultionCurrentBtn.backgroundColor = [UIColor clearColor]; self.resoultionCurrentBtn = sender; self.resoultionCurrentBtn.selected = YES; self.resoultionCurrentBtn.backgroundColor = RGBA(34, 30, 24, 1); // topImageView上的按钮的文字 [self.resolutionBtn setTitle:sender.titleLabel.text forState:UIControlStateNormal]; [self.delegate controlViewSwitch:self withDefinition:sender.titleLabel.text]; } - (void)backBtnClick:(UIButton *)sender { if ([self.delegate respondsToSelector:@selector(controlViewBack:)]) { [self.delegate controlViewBack:self]; } } - (void)exitFullScreen:(UIButton *)sender { if ([self.delegate respondsToSelector:@selector(controlViewChangeScreen:withFullScreen:)]) { [self.delegate controlViewChangeScreen:self withFullScreen:NO]; } } - (void)lockScrrenBtnClick:(UIButton *)sender { sender.selected = !sender.selected; self.isLockScreen = sender.selected; self.topImageView.hidden = self.isLockScreen; self.bottomImageView.hidden = self.isLockScreen; if (self.isLive) { self.backLiveBtn.hidden = self.isLockScreen; } [self.delegate controlViewLockScreen:self withLock:self.isLockScreen]; [self fadeOut:3]; } - (void)playBtnClick:(UIButton *)sender { sender.selected = !sender.selected; if (sender.selected) { [self.delegate controlViewPlay:self]; } else { [self.delegate controlViewPause:self]; } [self cancelFadeOut]; } - (void)fullScreenBtnClick:(UIButton *)sender { sender.selected = !sender.selected; self.fullScreen = !self.fullScreen; [self.delegate controlViewChangeScreen:self withFullScreen:YES]; [self fadeOut:3]; } - (void)captureBtnClick:(UIButton *)sender { [self.delegate controlViewSnapshot:self]; [self fadeOut:3]; } - (void)danmakuBtnClick:(UIButton *)sender { sender.selected = !sender.selected; [self fadeOut:3]; } - (void)moreBtnClick:(UIButton *)sender { self.topImageView.hidden = YES; self.bottomImageView.hidden = YES; self.lockBtn.hidden = YES; self.moreContentView.playerConfig = self.playerConfig; [self.moreContentView update]; self.moreContentView.hidden = NO; [self cancelFadeOut]; self.isShowSecondView = YES; } - (UIView *)resolutionView { if (!_resolutionView) { // 添加分辨率按钮和分辨率下拉列表 _resolutionView = [[UIView alloc] initWithFrame:CGRectZero]; _resolutionView.hidden = YES; [self addSubview:_resolutionView]; [_resolutionView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(330); make.height.mas_equalTo(self.mas_height); make.trailing.equalTo(self.mas_trailing).offset(0); make.top.equalTo(self.mas_top).offset(0); }]; _resolutionView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; } return _resolutionView; } - (void)resolutionBtnClick:(UIButton *)sender { self.topImageView.hidden = YES; self.bottomImageView.hidden = YES; self.lockBtn.hidden = YES; // 显示隐藏分辨率View self.resolutionView.hidden = NO; [DataReport report:@"change_resolution" param:nil]; [self cancelFadeOut]; self.isShowSecondView = YES; } - (void)progressSliderTouchBegan:(UISlider *)sender { self.isDragging = YES; [self cancelFadeOut]; } - (void)progressSliderValueChanged:(UISlider *)sender { if (self.maxPlayableRatio > 0 && sender.value > self.maxPlayableRatio) { sender.value = self.maxPlayableRatio; } [self.delegate controlViewPreview:self where:sender.value]; } - (void)progressSliderTouchEnded:(UISlider *)sender { [self.delegate controlViewSeek:self where:sender.value]; self.isDragging = NO; [self fadeOut:5]; } - (void)backLiveClick:(UIButton *)sender { [self.delegate controlViewReload:self]; } - (void)pointJumpClick:(UIButton *)sender { self.pointJumpBtn.hidden = YES; PlayerPoint *point = [self.videoSlider.pointArray objectAtIndex:self.pointJumpBtn.tag]; [self.delegate controlViewSeek:self where:point.where]; [self fadeOut:0.1]; } - (void)setDisableBackBtn:(BOOL)disableBackBtn { _disableBackBtn = disableBackBtn; self.backBtn.hidden = disableBackBtn; } - (void)setDisableMoreBtn:(BOOL)disableMoreBtn { _disableMoreBtn = disableMoreBtn; if (self.fullScreen) { self.moreBtn.hidden = disableMoreBtn; } } - (void)setDisableCaptureBtn:(BOOL)disableCaptureBtn { _disableCaptureBtn = disableCaptureBtn; if (self.fullScreen) { self.captureBtn.hidden = disableCaptureBtn; } } - (void)setDisableDanmakuBtn:(BOOL)disableDanmakuBtn { _disableDanmakuBtn = disableDanmakuBtn; if (self.fullScreen) { self.danmakuBtn.hidden = disableDanmakuBtn; } } /** * 屏幕方向发生变化会调用这里 */ - (void)setOrientationLandscapeConstraint { self.fullScreen = YES; self.lockBtn.hidden = NO; self.fullScreenBtn.selected = self.isLockScreen; self.fullScreenBtn.hidden = YES; self.resolutionBtn.hidden = self.resolutionArray.count == 0; self.moreBtn.hidden = self.disableMoreBtn; self.captureBtn.hidden = self.disableCaptureBtn; self.danmakuBtn.hidden = self.disableDanmakuBtn; [self.backBtn setImage:SuperPlayerImage(@"back_full") forState:UIControlStateNormal]; [self.totalTimeLabel mas_remakeConstraints:^(MASConstraintMaker *make) { if (self.resolutionArray.count > 0) { make.trailing.equalTo(self.resolutionBtn.mas_leading); } else { make.trailing.equalTo(self.bottomImageView.mas_trailing); } make.centerY.equalTo(self.startBtn.mas_centerY); make.width.mas_equalTo(self.isLive?10:60); }]; [self.bottomImageView mas_updateConstraints:^(MASConstraintMaker *make) { CGFloat b = self.superview.mm_safeAreaBottomGap; make.height.mas_equalTo(BOTTOM_IMAGE_VIEW_HEIGHT+b); }]; self.videoSlider.hiddenPoints = NO; } /** * 设置竖屏的约束 */ - (void)setOrientationPortraitConstraint { self.fullScreen = NO; self.lockBtn.hidden = YES; self.fullScreenBtn.selected = NO; self.fullScreenBtn.hidden = NO; self.resolutionBtn.hidden = YES; self.moreBtn.hidden = YES; self.captureBtn.hidden = YES; self.danmakuBtn.hidden = YES; self.moreContentView.hidden = YES; self.resolutionView.hidden = YES; [self.totalTimeLabel mas_remakeConstraints:^(MASConstraintMaker *make) { make.trailing.equalTo(self.fullScreenBtn.mas_leading); make.centerY.equalTo(self.startBtn.mas_centerY); make.width.mas_equalTo(self.isLive?10:60); }]; [self.bottomImageView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(BOTTOM_IMAGE_VIEW_HEIGHT); }]; self.videoSlider.hiddenPoints = YES; self.pointJumpBtn.hidden = YES; } #pragma mark - Private Method #pragma mark - setter - (UILabel *)titleLabel { if (!_titleLabel) { _titleLabel = [[UILabel alloc] init]; _titleLabel.textColor = [UIColor whiteColor]; _titleLabel.font = [UIFont systemFontOfSize:15.0]; } return _titleLabel; } - (UIButton *)backBtn { if (!_backBtn) { _backBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_backBtn setImage:SuperPlayerImage(@"back_full") forState:UIControlStateNormal]; [_backBtn addTarget:self action:@selector(backBtnClick:) forControlEvents:UIControlEventTouchUpInside]; } return _backBtn; } - (UIImageView *)topImageView { if (!_topImageView) { _topImageView = [[UIImageView alloc] init]; _topImageView.userInteractionEnabled = YES; _topImageView.image = SuperPlayerImage(@"top_shadow"); } return _topImageView; } - (UIImageView *)bottomImageView { if (!_bottomImageView) { _bottomImageView = [[UIImageView alloc] init]; _bottomImageView.userInteractionEnabled = YES; _bottomImageView.image = SuperPlayerImage(@"bottom_shadow"); } return _bottomImageView; } - (UIButton *)lockBtn { if (!_lockBtn) { _lockBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _lockBtn.exclusiveTouch = YES; [_lockBtn setImage:SuperPlayerImage(@"unlock-nor") forState:UIControlStateNormal]; [_lockBtn setImage:SuperPlayerImage(@"lock-nor") forState:UIControlStateSelected]; [_lockBtn addTarget:self action:@selector(lockScrrenBtnClick:) forControlEvents:UIControlEventTouchUpInside]; } return _lockBtn; } - (UIButton *)startBtn { if (!_startBtn) { _startBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_startBtn setImage:SuperPlayerImage(@"play") forState:UIControlStateNormal]; [_startBtn setImage:SuperPlayerImage(@"pause") forState:UIControlStateSelected]; [_startBtn addTarget:self action:@selector(playBtnClick:) forControlEvents:UIControlEventTouchUpInside]; } return _startBtn; } - (UILabel *)currentTimeLabel { if (!_currentTimeLabel) { _currentTimeLabel = [[UILabel alloc] init]; _currentTimeLabel.textColor = [UIColor whiteColor]; _currentTimeLabel.font = [UIFont systemFontOfSize:12.0f]; _currentTimeLabel.textAlignment = NSTextAlignmentCenter; } return _currentTimeLabel; } - (PlayerSlider *)videoSlider { if (!_videoSlider) { _videoSlider = [[PlayerSlider alloc] init]; [_videoSlider setThumbImage:SuperPlayerImage(@"slider_thumb") forState:UIControlStateNormal]; _videoSlider.minimumTrackTintColor = TintColor; // slider开始滑动事件 [_videoSlider addTarget:self action:@selector(progressSliderTouchBegan:) forControlEvents:UIControlEventTouchDown]; // slider滑动中事件 [_videoSlider addTarget:self action:@selector(progressSliderValueChanged:) forControlEvents:UIControlEventValueChanged]; // slider结束滑动事件 [_videoSlider addTarget:self action:@selector(progressSliderTouchEnded:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; _videoSlider.delegate = self; } return _videoSlider; } - (UILabel *)totalTimeLabel { if (!_totalTimeLabel) { _totalTimeLabel = [[UILabel alloc] init]; _totalTimeLabel.textColor = [UIColor whiteColor]; _totalTimeLabel.font = [UIFont systemFontOfSize:12.0f]; _totalTimeLabel.textAlignment = NSTextAlignmentCenter; } return _totalTimeLabel; } - (UIButton *)fullScreenBtn { if (!_fullScreenBtn) { _fullScreenBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_fullScreenBtn setImage:SuperPlayerImage(@"fullscreen") forState:UIControlStateNormal]; [_fullScreenBtn addTarget:self action:@selector(fullScreenBtnClick:) forControlEvents:UIControlEventTouchUpInside]; } return _fullScreenBtn; } - (UIButton *)captureBtn { if (!_captureBtn) { _captureBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_captureBtn setImage:SuperPlayerImage(@"capture") forState:UIControlStateNormal]; [_captureBtn setImage:SuperPlayerImage(@"capture_pressed") forState:UIControlStateSelected]; [_captureBtn addTarget:self action:@selector(captureBtnClick:) forControlEvents:UIControlEventTouchUpInside]; } return _captureBtn; } - (UIButton *)danmakuBtn { if (!_danmakuBtn) { _danmakuBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_danmakuBtn setImage:SuperPlayerImage(@"danmu") forState:UIControlStateNormal]; [_danmakuBtn setImage:SuperPlayerImage(@"danmu_pressed") forState:UIControlStateSelected]; [_danmakuBtn addTarget:self action:@selector(danmakuBtnClick:) forControlEvents:UIControlEventTouchUpInside]; } return _danmakuBtn; } - (UIButton *)moreBtn { if (!_moreBtn) { _moreBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_moreBtn setImage:SuperPlayerImage(@"more") forState:UIControlStateNormal]; [_moreBtn setImage:SuperPlayerImage(@"more_pressed") forState:UIControlStateSelected]; [_moreBtn addTarget:self action:@selector(moreBtnClick:) forControlEvents:UIControlEventTouchUpInside]; } return _moreBtn; } - (UIButton *)resolutionBtn { if (!_resolutionBtn) { _resolutionBtn = [UIButton buttonWithType:UIButtonTypeCustom]; _resolutionBtn.titleLabel.font = [UIFont systemFontOfSize:12]; _resolutionBtn.backgroundColor = [UIColor clearColor]; [_resolutionBtn addTarget:self action:@selector(resolutionBtnClick:) forControlEvents:UIControlEventTouchUpInside]; } return _resolutionBtn; } - (UIButton *)backLiveBtn { if (!_backLiveBtn) { _backLiveBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [_backLiveBtn setTitle:@"返回直播" forState:UIControlStateNormal]; _backLiveBtn.titleLabel.font = [UIFont systemFontOfSize:14]; UIImage *image = SuperPlayerImage(@"qg_online_bg"); UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(33 * 0.5, 33 * 0.5, 33 * 0.5, 33 * 0.5)]; [_backLiveBtn setBackgroundImage:resizableImage forState:UIControlStateNormal]; [_backLiveBtn addTarget:self action:@selector(backLiveClick:) forControlEvents:UIControlEventTouchUpInside]; } return _backLiveBtn; } - (UIButton *)pointJumpBtn { if (!_pointJumpBtn) { _pointJumpBtn = [UIButton buttonWithType:UIButtonTypeCustom]; UIImage *image = SuperPlayerImage(@"copywright_bg"); UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 20) resizingMode:UIImageResizingModeStretch]; [_pointJumpBtn setBackgroundImage:resizableImage forState:UIControlStateNormal]; _pointJumpBtn.titleLabel.font = [UIFont systemFontOfSize:14]; [_pointJumpBtn addTarget:self action:@selector(pointJumpClick:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_pointJumpBtn]; } return _pointJumpBtn; } - (SuperPlayerSettingsView *)moreContentView { if (!_moreContentView) { _moreContentView = [[SuperPlayerSettingsView alloc] initWithFrame:CGRectZero]; _moreContentView.controlView = self; _moreContentView.hidden = YES; [self addSubview:_moreContentView]; [_moreContentView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(330); make.height.mas_equalTo(self.mas_height); make.trailing.equalTo(self.mas_trailing).offset(0); make.top.equalTo(self.mas_top).offset(0); }]; _moreContentView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; } return _moreContentView; } #pragma mark - UIGestureRecognizerDelegate - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view isKindOfClass:[UISlider class]]) { // 如果在滑块上点击就不响应pan手势 return NO; } return YES; } #pragma mark - Public method - (void)setHidden:(BOOL)hidden { [super setHidden:hidden]; if (hidden) { self.resolutionView.hidden = YES; self.moreContentView.hidden = YES; if (!self.isLockScreen) { self.topImageView.hidden = NO; self.bottomImageView.hidden = NO; } } self.lockBtn.hidden = !self.isFullScreen; self.isShowSecondView = NO; self.pointJumpBtn.hidden = YES; } /** 重置ControlView */ - (void)playerResetControlView { self.videoSlider.value = 0; self.videoSlider.progressView.progress = 0; self.currentTimeLabel.text = @"00:00"; self.totalTimeLabel.text = @"00:00"; self.playeBtn.hidden = YES; self.resolutionView.hidden = YES; self.backgroundColor = [UIColor clearColor]; self.moreBtn.enabled = !self.disableMoreBtn; self.lockBtn.hidden = !self.isFullScreen; self.danmakuBtn.enabled = YES; self.captureBtn.enabled = YES; self.backLiveBtn.hidden = YES; } - (void)setPointArray:(NSArray *)pointArray { [super setPointArray:pointArray]; for (PlayerPoint *holder in self.videoSlider.pointArray) { [holder.holder removeFromSuperview]; } [self.videoSlider.pointArray removeAllObjects]; for (SPVideoFrameDescription *p in pointArray) { PlayerPoint *point = [self.videoSlider addPoint:p.where]; point.content = p.text; point.timeOffset = p.time; } } - (void)onPlayerPointSelected:(PlayerPoint *)point { NSString *text = [NSString stringWithFormat:@" %@ %@ ", [StrUtils timeFormat:point.timeOffset], point.content]; [self.pointJumpBtn setTitle:text forState:UIControlStateNormal]; [self.pointJumpBtn sizeToFit]; CGFloat x = self.videoSlider.mm_x + self.videoSlider.mm_w * point.where - self.pointJumpBtn.mm_h/2; if (x < 0) x = 0; if (x + self.pointJumpBtn.mm_h/2 > ScreenWidth) x = ScreenWidth - self.pointJumpBtn.mm_h/2; self.pointJumpBtn.tag = [self.videoSlider.pointArray indexOfObject:point]; self.pointJumpBtn.m_left(x).m_bottom(60); self.pointJumpBtn.hidden = NO; [DataReport report:@"player_point" param:nil]; } - (void)setProgressTime:(NSInteger)currentTime totalTime:(NSInteger)totalTime progressValue:(CGFloat)progress playableValue:(CGFloat)playable { if (!self.isDragging) { // 更新slider self.videoSlider.value = progress; } // 更新当前播放时间 self.currentTimeLabel.text = [StrUtils timeFormat:currentTime]; // 更新总时间 self.totalTimeLabel.text = [StrUtils timeFormat:totalTime]; [self.videoSlider.progressView setProgress:playable animated:NO]; } - (void)resetWithResolutionNames:(NSArray *)resolutionNames currentResolutionIndex:(NSUInteger)currentResolutionIndex isLive:(BOOL)isLive isTimeShifting:(BOOL)isTimeShifting isPlaying:(BOOL)isPlaying { NSAssert(resolutionNames.count == 0 || currentResolutionIndex < resolutionNames.count, @"Invalid argument when reseeting %@", NSStringFromClass(self.class)); [self setPlayState:isPlaying]; self.backLiveBtn.hidden = !isTimeShifting; self.moreContentView.enableSpeedAndMirrorControl = !isLive; for (UIView *subview in self.resolutionView.subviews) [subview removeFromSuperview]; _resolutionArray = resolutionNames; if (_resolutionArray.count > 0) { [self.resolutionBtn setTitle:resolutionNames[currentResolutionIndex] forState:UIControlStateNormal]; } UILabel *lable = [UILabel new]; lable.text = @"清晰度"; lable.textAlignment = NSTextAlignmentCenter; lable.textColor = [UIColor whiteColor]; [self.resolutionView addSubview:lable]; [lable mas_makeConstraints:^(MASConstraintMaker *make) { make.width.equalTo(self.resolutionView.mas_width); make.height.mas_equalTo(30); make.left.equalTo(self.resolutionView.mas_left); make.top.equalTo(self.resolutionView.mas_top).mas_offset(20); }]; // 分辨率View上边的Btn for (NSInteger i = 0 ; i < _resolutionArray.count; i++) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setTitle:_resolutionArray[i] forState:UIControlStateNormal]; [btn setTitleColor:RGBA(252, 89, 81, 1) forState:UIControlStateSelected]; [self.resolutionView addSubview:btn]; [btn addTarget:self action:@selector(changeResolution:) forControlEvents:UIControlEventTouchUpInside]; [btn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.equalTo(self.resolutionView.mas_width); make.height.mas_equalTo(45); make.left.equalTo(self.resolutionView.mas_left); make.centerY.equalTo(self.resolutionView.mas_centerY).offset((i-self.resolutionArray.count/2.0+0.5)*45); }]; btn.tag = MODEL_TAG_BEGIN+i; if (i == currentResolutionIndex) { btn.selected = YES; btn.backgroundColor = RGBA(34, 30, 24, 1); self.resoultionCurrentBtn = btn; } } if (self.isLive != isLive) { self.isLive = isLive; [self setNeedsLayout]; } // 时移的时候不能切清晰度 self.resolutionBtn.userInteractionEnabled = !isTimeShifting; } /** 播放按钮状态 */ - (void)setPlayState:(BOOL)state { self.startBtn.selected = state; } - (void)setTitle:(NSString *)title { [super setTitle:title]; self.titleLabel.text = title; } - (void)hideDanmu { [self setDisableDanmakuBtn:YES]; } - (void)hideReplay { [self.repeatBtn setHidden:YES]; } #pragma clang diagnostic pop @end