| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530 |
- //
- // YBVideoControlView.m
- // YBVideo
- //
- // Created by YB007 on 2019/11/7.
- // Copyright © 2019 cat. All rights reserved.
- //
- #import "YBVideoControlView.h"
- #import <ZFPlayer/UIView+ZFFrame.h>
- #import <ZFPlayer/UIImageView+ZFCache.h>
- #import <ZFPlayer/ZFUtilities.h>
- #import "ZFLoadingView.h"
- #import <ZFPlayer/ZFSliderView.h>
- #import "UIImage+RKCircleImg.h"
- #import "expensiveGiftV.h"
- #import "continueGift.h"
- #import "RKShowPaintedView.h"
- #import "YBHomeRedObj.h"
- @interface YBVideoControlView()<haohuadelegate,ZFSliderViewDelegate>
- {
- BOOL _muteChange;
-
- expensiveGiftV *haohualiwuV;//豪华礼物
- continueGift *continueGifts;//连送礼物
- UIView *liansongliwubottomview;
-
- }
- /// 封面图
- @property (nonatomic, strong) UIImageView *coverImageView;
- @property (nonatomic, strong) UIButton *playBtn;
- @property (nonatomic, strong) ZFSliderView *sliderView;
- @property (nonatomic, strong) UIImageView *bgImgView;
- @property (nonatomic, strong) UIView *effectView;
- @property(nonatomic,strong)RKShowPaintedView *paintedShowRegion; //手绘礼物显示区域
- @property(nonatomic,strong)UIButton *ttBackBtn;
- @property(nonatomic,strong)UILabel *timeLb;
- @end
- @implementation YBVideoControlView
- @synthesize player = _player;
- - (instancetype)init {
- self = [super init];
- if (self) {
- _muteChange = NO;
- [self addSubview:self.paintedShowRegion];
- liansongliwubottomview = [[UIView alloc]init];
- liansongliwubottomview.userInteractionEnabled = NO;
- liansongliwubottomview.backgroundColor = UIColor.clearColor;
- [self addSubview:liansongliwubottomview];
- liansongliwubottomview.frame = CGRectMake(0, statusbarHeight + 240,_window_width,140);
- [self addSubview:self.playBtn];
- [self addSubview:self.ttBackBtn];
- [_ttBackBtn mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(self.mas_left).offset(statusbarHeight+10);
- make.top.equalTo(self.mas_top).offset(statusbarHeight+20);
- make.width.height.mas_equalTo(40);
- }];
- [self addSubview:self.sliderView];
- [self addSubview:self.timeLb];
- [self addSubview:self.zfVolumeView];
- [self resetControlView];
-
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];
-
- }
- return self;
- }
- - (void)dealloc{
- [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];
- }
- /// 音量改变的通知
- - (void)volumeChanged:(NSNotification *)notification {
- if (_muteChange == YES) {
- _muteChange = NO;
- return;
- }
- NSDictionary *userInfo = notification.userInfo;
- NSString *reasonstr = userInfo[@"AVSystemController_AudioVolumeChangeReasonNotificationParameter"];
- if ([reasonstr isEqualToString:@"ExplicitVolumeChange"]) {
- float volume = [ userInfo[@"AVSystemController_AudioVolumeNotificationParameter"] floatValue];
- self.currentVol = volume;
- [self.zfVolumeView updateProgress:volume withVolumeBrightnessType:ZFVolumeBrightnessTypeVolume];
- }
- }
- - (void)layoutSubviews {
- [super layoutSubviews];
- self.coverImageView.frame = self.player.currentPlayerManager.view.bounds;
-
- CGFloat min_x = 0;
- CGFloat min_y = 0;
- CGFloat min_w = 0;
- CGFloat min_h = 0;
- CGFloat min_view_w = self.zf_width;
- CGFloat min_view_h = self.zf_height;
-
- min_w = 100;
- min_h = 100;
- self.playBtn.frame = CGRectMake(min_x, min_y, min_w, min_h);
- self.playBtn.center = self.center;
-
- min_x = 0;
- min_y = min_view_h - 50 - ShowDiff-25;//80
- min_w = min_view_w;
- min_h = 42;
- self.sliderView.frame = CGRectMake(min_x, min_y, min_w, min_h);
- self.bgImgView.frame = self.bounds;
- self.effectView.frame = self.bgImgView.bounds;
-
- self.zfVolumeView.frame = self.sliderView.frame;
- NSLog(@"===%@",self.zfVolumeView);
-
- self.timeLb.frame = CGRectMake(0, self.sliderView.top-20, self.width, 20);
- }
- - (void)resetControlView {
- self.playBtn.hidden = YES;
- self.sliderView.value = 0;
- self.sliderView.bufferValue = 0;
- self.coverImageView.contentMode = UIViewContentModeScaleAspectFit;
-
- //礼物视图重置
- if (continueGifts) {
- [continueGifts stopTimerAndArray];
- [continueGifts initGift];
- [continueGifts removeFromSuperview];
- continueGifts = nil;
- }
- if (haohualiwuV) {
- [haohualiwuV stopHaoHUaLiwu];
- [haohualiwuV removeFromSuperview];
- haohualiwuV.expensiveGiftCount = nil;
- haohualiwuV = nil;
- }
- liansongliwubottomview.top = statusbarHeight+240;
- if (_paintedShowRegion) {
- [_paintedShowRegion destroyPaitend];
- }
- }
- /// 加载状态改变
- - (void)videoPlayer:(ZFPlayerController *)videoPlayer loadStateChanged:(ZFPlayerLoadState)state {
- if (state == ZFPlayerLoadStatePrepare) {
- self.coverImageView.hidden = NO;
- } else if (state == ZFPlayerLoadStatePlaythroughOK || state == ZFPlayerLoadStatePlayable) {
- self.coverImageView.hidden = YES;
- self.effectView.hidden = NO;
- //缓冲的时候点击了暂停
- if (self.playBtn.hidden == NO) {
- [videoPlayer.currentPlayerManager pause];
- }
- // 青少年模式受限
- if ([YBYoungManager shareInstance].youngBan == 1) {
- self.playBtn.hidden = NO;
- [videoPlayer.currentPlayerManager pause];
- }
- }
- if ((state == ZFPlayerLoadStateStalled || state == ZFPlayerLoadStatePrepare) && videoPlayer.currentPlayerManager.isPlaying) {
- [self.sliderView startAnimating];
- } else {
-
- [self.sliderView stopAnimating];
- }
- }
- - (void)videoPlayer:(ZFPlayerController *)videoPlayer playStateChanged:(ZFPlayerPlaybackState)state {
- // NSLog(@"rk_===playState:%lu",(unsigned long)state);
- if (_isDisappear&&state==ZFPlayerPlayStatePlaying) {
- NSLog(@"rk_实行了");
- [self.player stopCurrentPlayingCell];
- }
- }
- /// 播放进度改变回调
- - (void)videoPlayer:(ZFPlayerController *)videoPlayer currentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime {
- // NSLog(@"xxxxxx:%f",videoPlayer.bufferProgress);
- if (videoPlayer.bufferProgress >= 0.9) {
- [self.sliderView stopAnimating];
- }
- self.sliderView.value = videoPlayer.progress;
- }
- - (void)gestureSingleTapped:(ZFPlayerGestureControl *)gestureControl {
-
- if (self.ybContorEvent) {
- self.ybContorEvent(@"控制-单击",gestureControl);
- }
- }
- #pragma mark - sss
- - (void)gestureDoubleTapped:(ZFPlayerGestureControl *)gestureControl {
- if (self.ybContorEvent) {
- self.ybContorEvent(@"控制-双击",gestureControl);
- }
- }
- - (void)gestureEndedPan:(ZFPlayerGestureControl *)gestureControl panDirection:(ZFPanDirection)direction panLocation:(ZFPanLocation)location;{
- if (direction == 2 && location == 2) {
- //侧滑进入个人主页
- if (self.ybContorEvent) {
- self.ybContorEvent(@"控制-主页",gestureControl);
- }
- }
- NSLog(@"rk_____end--dir:%lu==loc:%lu",(unsigned long)direction,(unsigned long)location);
- }
- #pragma mark - eeee
- -(void)controlSingleTapped {
- if (self.player.currentPlayerManager.isPlaying) {
- [[YBHomeRedObj redInstance]timerPause];
- [self.player.currentPlayerManager pause];
- NSLog(@"22222===:%lu",self.player.currentPlayerManager.playState);
- self.playBtn.hidden = NO;
- self.playBtn.transform = CGAffineTransformMakeScale(1.5f, 1.5f);
- [UIView animateWithDuration:0.2f delay:0
- options:UIViewAnimationOptionCurveEaseIn animations:^{
- self.playBtn.transform = CGAffineTransformIdentity;
- } completion:^(BOOL finished) {
- }];
- } else {
- [self.player.currentPlayerManager play];
- self.playBtn.hidden = YES;
- [[NSNotificationCenter defaultCenter]postNotificationName:@"lookCountGo" object:nil];
- }
- }
- -(void)videoMuted:(BOOL)mute{
- _muteChange = YES;
- [self.player setMuted:mute];
- }
- -(void)showPlayBtn{
- self.playBtn.hidden = NO;
- if (self.player.currentPlayerManager.isPlaying) {
- [self.player.currentPlayerManager pause];
- }
- }
- -(void)hiddenPlayBtn {
- [self.player.currentPlayerManager play];
- self.playBtn.hidden = YES;
- }
- - (void)setPlayer:(ZFPlayerController *)player {
- _player = player;
- [player.currentPlayerManager.view insertSubview:self.bgImgView atIndex:0];
- /*
- [self.bgImgView addSubview:self.effectView];
- */
- [player.currentPlayerManager.view insertSubview:self.coverImageView atIndex:1];
- }
- - (void)showCoverViewWithUrl:(NSString *)coverUrl withImageMode:(UIViewContentMode)contentMode {
- self.coverImageView.contentMode = contentMode;
- [self.coverImageView sd_setImageWithURL:[NSURL URLWithString:coverUrl] placeholderImage:[UIImage imageNamed:@"img_video_loading"]];
- /*
- [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:coverUrl] placeholderImage:[UIImage imageNamed:@"loading_bgView"]];
- */
- }
- #pragma mark - 打赏开始
- -(void)showGift:(NSDictionary *)playDic {
- NSString *type = minstr([playDic valueForKey:@"type"]);
- if (!continueGifts) {
- continueGifts = [[continueGift alloc]initWithFrame:CGRectMake(0, 0, liansongliwubottomview.width, liansongliwubottomview.height)];
- [liansongliwubottomview addSubview:continueGifts];
- //初始化礼物空位
- [continueGifts initGift];
- YBWeakSelf;
- continueGifts.rkPaintedEvent = ^(NSDictionary *giftDic) {
- [weakSelf showPaintedGift:giftDic];
- };
- }
- if ([type isEqual:@"1"]) {
- [self expensiveGift:playDic];
- }else{
- //手绘以及普通礼物都进 continueGifts 由它执行队列
- [continueGifts GiftPopView:playDic andLianSong:@"Y"];
- }
- }
- -(void)showPaintedGift:(NSDictionary *)giftDic {
- //手绘显示动画
- _paintedShowRegion.giftPathStr = minstr([giftDic valueForKey:@"gifticon"]);
- _paintedShowRegion.paintedWidth = [minstr([giftDic valueForKey:@"paintedWidth"]) floatValue];
- _paintedShowRegion.paintedHeight = [minstr([giftDic valueForKey:@"paintedHeight"]) floatValue];
- _paintedShowRegion.paintedPointArray = [NSArray arrayWithArray:[giftDic valueForKey:@"paintedPath"]];
- }
- /************ 礼物弹出及队列显示开始 *************/
- -(void)expensiveGiftdelegate:(NSDictionary *)giftData{
- if (!haohualiwuV) {
- haohualiwuV = [[expensiveGiftV alloc]init];
- haohualiwuV.delegate = self;
- [self addSubview:haohualiwuV];
- }
- if (giftData == nil) {
-
- }else {
- [haohualiwuV addArrayCount:giftData];
- }
- if(haohualiwuV.haohuaCount == 0){
- [haohualiwuV enGiftEspensive];
- }
- }
- -(void)expensiveGift:(NSDictionary *)giftData{
- if (!haohualiwuV) {
- haohualiwuV = [[expensiveGiftV alloc]init];
- haohualiwuV.delegate = self;
- [self addSubview:haohualiwuV];
- }
- if (giftData == nil) {
-
- }else {
- [haohualiwuV addArrayCount:giftData];
- }
- if(haohualiwuV.haohuaCount == 0){
- [haohualiwuV enGiftEspensive];
- }
- }
- #pragma mark - 打赏结束
- #pragma mark - getter
- - (UIImageView *)bgImgView {
- if (!_bgImgView) {
- _bgImgView = [[UIImageView alloc] init];
- _bgImgView.userInteractionEnabled = YES;
- //[_bgImgView setImage:[UIImage imageNamed:@"img_video_loading"]];
- [_bgImgView setImage:[PublicObj getImgWithColor:CellRow_Cor]];
- }
- return _bgImgView;
- }
- - (UIView *)effectView {
- if (!_effectView) {
- if (@available(iOS 8.0, *)) {
- UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
- _effectView = [[UIVisualEffectView alloc] initWithEffect:effect];
- } else {
- UIToolbar *effectView = [[UIToolbar alloc] init];
- effectView.barStyle = UIBarStyleBlackTranslucent;
- _effectView = effectView;
- }
- }
- return _effectView;
- }
- - (ZFVolumeBrightnessView *)zfVolumeView {
- if (!_zfVolumeView) {
- _zfVolumeView = [[ZFVolumeBrightnessView alloc]init];
- _zfVolumeView.backgroundColor = RGB_COLOR(@"#000000", 0.2);
- }
- return _zfVolumeView;
- }
- - (UIButton *)playBtn {
- if (!_playBtn) {
- _playBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- _playBtn.userInteractionEnabled = NO;
- [_playBtn setImage:[UIImage imageNamed:@"icon_play_pause"] forState:UIControlStateNormal];
- }
- return _playBtn;
- }
- #pragma mark - 全屏返回按钮
- - (UIButton *)ttBackBtn {
- if (!_ttBackBtn) {
- _ttBackBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [_ttBackBtn setImage:[UIImage imageNamed:@"video_返回"] forState:0];
- [_ttBackBtn addTarget:self action:@selector(clickTtBackBtn) forControlEvents:UIControlEventTouchUpInside];
- _ttBackBtn.hidden = YES;
- _ttBackBtn.jk_touchAreaInsets = UIEdgeInsetsMake(20, 20, 20, 20);
- }
- return _ttBackBtn;
- }
- -(void)clickTtBackBtn {
- BOOL cuurentIsFull = [self.player isFullScreen];
- [self.player enterFullScreen:!cuurentIsFull animated:YES];
- }
- -(void)changeFullScreen:(BOOL)isFull;{
- _ttBackBtn.hidden = !isFull;
- }
- - (ZFSliderView *)sliderView {
- if (!_sliderView) {
- _sliderView = [[ZFSliderView alloc] init];
- _sliderView.delegate = self;
- _sliderView.maximumTrackTintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.2];
- _sliderView.minimumTrackTintColor = [UIColor whiteColor];
- _sliderView.bufferTrackTintColor = [UIColor clearColor];
- _sliderView.sliderHeight = 1;
- _sliderView.isHideSliderBlock = NO;
- _sliderView.sliderHeight = 2;
- _sliderView.isHideSliderBlock = NO;
- UIImage *pointImg = [PublicObj getImgWithColor:RGB_COLOR(@"#ffffff", 1)withSize:CGSizeMake(10, 10)];
- [_sliderView setThumbImage:[pointImg rk_circleImage] forState:0];
- // _sliderView.backgroundColor = UIColor.redColor;
- }
- return _sliderView;
- }
- -(UILabel *)timeLb{
- if(!_timeLb){
- _timeLb = [[UILabel alloc]init];
- _timeLb.textColor = UIColor.whiteColor;
- _timeLb.textAlignment = NSTextAlignmentCenter;
- _timeLb.font = [UIFont systemFontOfSize:14];
- _timeLb.hidden = YES;
- }
- return _timeLb;
- }
- - (UIImageView *)coverImageView {
- if (!_coverImageView) {
- _coverImageView = [[UIImageView alloc] init];
- _coverImageView.userInteractionEnabled = YES;
- _coverImageView.clipsToBounds = YES;
- }
- return _coverImageView;
- }
- - (RKShowPaintedView *)paintedShowRegion {
- if (!_paintedShowRegion) {
- _paintedShowRegion = [[RKShowPaintedView alloc]init];
- //_paintedShowRegion.backgroundColor = UIColor.redColor;
- }
- return _paintedShowRegion;
- }
- #pragma mark - ZFSliderViewDelegate
- - (void)sliderTouchBegan:(float)value {
- self.sliderView.isdragging = YES;
- self.timeLb.hidden = NO;
- }
- - (void)sliderTouchEnded:(float)value {
- if (self.player.totalTime > 0) {
- @zf_weakify(self)
-
- NSTimeInterval currentTime = self.player.totalTime*value;
-
-
- // NSLog(@"sliderTouchEnded=====current:%@",currentTime);
- // /// 判断是否大于免费时长
- // CGFloat freeTime = [minstr([_curVideoDic valueForKey:@"minute"]) floatValue] * 60;
- //
- // /// 提示判断
- // BOOL clickCon = [TTCatchInfo getClickContinue];
- // int issubscribe = [minstr([_curVideoDic valueForKey:@"issubscribe"]) intValue];
- //
- // if (issubscribe == 0 && clickCon == NO && currentTime > freeTime) {
- // currentTime = freeTime;
- // [self pauseVideo];
- // [self freeTimeEnd];
- // self.sliderView.value = currentTime/self.player.totalTime;
- // self.sliderView.isdragging = NO;
- // }
- // NSString *videoId = minstr([_curVideoDic valueForKey:@"id"]);
- // CGFloat videoOldVal = [TTCatchInfo getVideoMaxTimewithVideoid:videoId];
- // //NSLog(@"rk_tt-拖动结束旧的观看时长:%f",videoOldVal);
- // if (currentTime > videoOldVal) {
- // [TTCatchInfo saveVideoMaxTime:currentTime withVideoid:videoId];
- //NSLog(@"rk_tt-拖动结束save==>new:%f",[TTCatchInfo getVideoMaxTimewithVideoid:videoId]);
- // }
-
- [self.player seekToTime:currentTime completionHandler:^(BOOL finished) {
- @zf_strongify(self)
- if (finished) {
- self.sliderView.isdragging = NO;
- self.timeLb.hidden = YES;
- }
- }];
- } else {
- self.sliderView.isdragging = NO;
- }
- }
- - (void)sliderValueChanged:(float)value {
- if (self.player.totalTime == 0) {
- self.sliderView.value = 0;
- return;
- }
- self.sliderView.isdragging = YES;
- NSString *currentTimeString = [ZFUtilities convertTimeSecond:self.player.totalTime*value];
- NSString *allTimeString = [ZFUtilities convertTimeSecond:self.player.totalTime];
- NSLog(@"sliderTouchEnded=====currentTimeString:%@\nall:%@",currentTimeString,allTimeString);
- self.timeLb.text = [NSString stringWithFormat:@"%@/%@",currentTimeString,allTimeString];
- }
- - (void)sliderTapped:(float)value {
- if (self.player.totalTime > 0) {
- self.sliderView.isdragging = YES;
-
- NSTimeInterval currentTime = self.player.totalTime*value;
-
- // /// 判断是否大于免费时长
- // CGFloat freeTime = [minstr([_curVideoDic valueForKey:@"minute"]) floatValue] * 60;
- //
- // /// 提示判断
- // BOOL clickCon = [TTCatchInfo getClickContinue];
- // int issubscribe = [minstr([_curVideoDic valueForKey:@"issubscribe"]) intValue];
- //
- // if (issubscribe == 0 && clickCon == NO && currentTime > freeTime) {
- // currentTime = freeTime;
- // [self pauseVideo];
- // [self freeTimeEnd];
- // self.sliderView.value = currentTime/self.player.totalTime;
- // self.sliderView.isdragging = NO;
- // }
- // NSString *videoId = minstr([_curVideoDic valueForKey:@"id"]);
- // CGFloat videoOldVal = [TTCatchInfo getVideoMaxTimewithVideoid:videoId];
- // //NSLog(@"rk_tt-拖动结束旧的观看时长:%f",videoOldVal);
- // if (currentTime > videoOldVal) {
- // [TTCatchInfo saveVideoMaxTime:currentTime withVideoid:videoId];
- // //NSLog(@"rk_tt-拖动结束save==>new:%f",[TTCatchInfo getVideoMaxTimewithVideoid:videoId]);
- // }
- @zf_weakify(self)
- [self.player seekToTime:currentTime completionHandler:^(BOOL finished) {
- @zf_strongify(self)
- if (finished) {
- self.sliderView.isdragging = NO;
- //[self.player.currentPlayerManager play];
- }
- }];
- } else {
- self.sliderView.isdragging = NO;
- self.sliderView.value = 0;
- }
- }
- @end
|