MusicPlayerView.m 13.9 KB
//
//  MusicPlayerView.m
//  DreamSleep
//
//  Created by peter on 2022/5/7.
//

#import "MusicPlayerView.h"
#import "SPButton.h"

@interface MusicPlayerView () <UIGestureRecognizerDelegate>
@property (nonatomic, strong) UIButton *dismissBtn;
@property (nonatomic, strong) UIImageView *audioPicIV;
@property (nonatomic, strong) UILabel *audioNameLab;
@property (nonatomic, strong) UISlider *progressV;
@property (nonatomic, strong) UILabel *proLeftLb;
@property (nonatomic, strong) UILabel *proRightLb;
@property (nonatomic, strong) UIButton *playerBtn;
@property (nonatomic, strong) UIButton *leftPlayBtn;
@property (nonatomic, strong) UIButton *rightPlayBtn;

@property (nonatomic,strong) SPButton *playerListBtn;
@property (nonatomic,strong) SPButton *circleBtn;
@property (nonatomic,strong) SPButton *closeBtn;
@end

@implementation MusicPlayerView {
    UITapGestureRecognizer *_tapGesture;
}

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]) {
        self.dk_backgroundColorPicker = DKColorPickerWithKey(VCViewBG);
        [self addSubview:self.dismissBtn];
        [self addSubview:self.audioPicIV];
        [self addSubview:self.audioNameLab];
        [self addSubview:self.progressV];
        [self addSubview:self.proLeftLb];
        [self addSubview:self.proRightLb];
        [self addSubview:self.playerBtn];
        [self addSubview:self.leftPlayBtn];
        [self addSubview:self.rightPlayBtn];
        [self addSubview:self.playerListBtn];
        [self addSubview:self.circleBtn];
        [self addSubview:self.closeBtn];
        
        [self.audioPicIV mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerX.equalTo(self.mas_centerX);
            make.width.height.equalTo(@144);
            make.top.equalTo(self.mas_top).offset(160);
        }];
        [self.audioNameLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(self.audioPicIV.mas_bottom).offset(18);
            make.centerX.equalTo(self.mas_centerX);
            make.left.equalTo(self.mas_left);
            make.right.equalTo(self.mas_right);
        }];
        [self.progressV mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.mas_left).offset(38);
            make.right.equalTo(self.mas_right).offset(-37);
            make.height.equalTo(@15);
            make.bottom.equalTo(self.playerBtn.mas_top).offset(-40);
        }];
        [self.proLeftLb mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.progressV.mas_left);
            make.top.equalTo(self.progressV.mas_bottom).offset(6);
            make.height.equalTo(@17);
            make.width.equalTo(@100);
        }];
        [self.proRightLb mas_makeConstraints:^(MASConstraintMaker *make) {
            make.right.equalTo(self.progressV.mas_right);
            make.top.equalTo(self.progressV.mas_bottom).offset(6);
            make.height.equalTo(@17);
            make.width.equalTo(@100);
        }];
        [self.playerBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerX.equalTo(self.mas_centerX);
            make.width.equalTo(@50);
            make.height.equalTo(@50);
            make.bottom.equalTo(self.playerListBtn.mas_top).offset(-25);
        }];
        [self.leftPlayBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerY.equalTo(self.playerBtn.mas_centerY);
            make.width.equalTo(@30);
            make.height.equalTo(@30);
            make.right.equalTo(self.playerBtn.mas_left).offset(-60);
        }];
        [self.rightPlayBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerY.equalTo(self.playerBtn.mas_centerY);
            make.width.equalTo(@30);
            make.height.equalTo(@30);
            make.left.equalTo(self.playerBtn.mas_right).offset(60);
        }];
        [self.playerListBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.bottom.equalTo(self.mas_bottom).offset(-36);
            make.left.equalTo(self.mas_left).offset(23);
            make.width.equalTo(@80);
            make.height.equalTo(@60);
        }];
        [self.circleBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.bottom.equalTo(self.mas_bottom).offset(-36);
            make.centerX.equalTo(self.mas_centerX);
            make.width.equalTo(@60);
            make.height.equalTo(@60);
        }];
        [self.closeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.bottom.equalTo(self.mas_bottom).offset(-36);
            make.right.equalTo(self.mas_right).offset(-23);
            make.width.equalTo(@80);
            make.height.equalTo(@60);
        }];
    }
    return self;
}

- (void)dismiss {
    [self.ds_viewController dismissViewControllerAnimated:YES completion:nil];
}

- (void)updatePlayerView:(SubAudioModel *)model {
    [self.audioPicIV yy_setImageWithURL:[NSURL URLWithString:model.audio_pic] placeholder:[UIImage imageNamed:@"basicPlaceholder"]];
    self.audioNameLab.text = model.audio_name;
}

- (void)updateProgress:(float)progress currentTime:(NSString *)currentTime totalTime:(NSString *)totalTime {
    self.progressV.value = progress;
    self.proLeftLb.text = currentTime;
    self.proRightLb.text = totalTime;
}

- (void)circelBtnClick:(UIButton *)sender {
    SoundPlayMode mode = sender.tag;
    NSString *title = sender.titleLabel.text;
    NSString *normalImgName = @"single_play";
    NSString *dkImgName = @"dk_single_play";
    if (mode == SoundPlayModeSingle) {
        mode = SoundPlayModeCycle;
        title = @"单曲循环";
        normalImgName = @"single_cycle";
        dkImgName = @"dk_single_cycle";
    } else if (mode == SoundPlayModeCycle) {
        mode = SoundPlayModeOrder;
        title = @"顺序播放";
        normalImgName = @"order_play";
        dkImgName = @"dk_order_play";
    } else if (mode == SoundPlayModeOrder) {
        mode = SoundPlayModeSingle;
        title = @"单节播放";
        normalImgName = @"single_play";
        dkImgName = @"dk_single_play";
    }
    sender.tag = mode;
    [sender setTitle:title forState:UIControlStateNormal];
    [sender dk_setImage:DKImagePickerWithNames(normalImgName, dkImgName, normalImgName) forState:UIControlStateNormal];
}

#pragma mark - 滑块事件
- (void)progresssBtnClick:(UISlider *)sender {
    DSLog(@"progresssBtnClick:%f", sender.value);
    if (self.delegate && [self.delegate respondsToSelector:@selector(didSliderValueChange:)]) {
        [self.delegate didSliderValueChange:sender.value];
    }
}

- (void)sliderTouchDown:(UISlider *)sender {
    DSLog(@"sliderTouchDown");
    _tapGesture.enabled = NO;
    if (self.delegate && [self.delegate respondsToSelector:@selector(didSliderTouchBegan:)]) {
        [self.delegate didSliderTouchBegan:sender.value];
    }
}

- (void)sliderTouchUpInSide:(UISlider *)sender {
    DSLog(@"sliderTouchUpInSide");
    _tapGesture.enabled = YES;
    if (self.delegate && [self.delegate respondsToSelector:@selector(didSliderTouchEnded:)]) {
        [self.delegate didSliderTouchEnded:sender.value];
    }
}

- (void)playerBtnClick:(UIButton *)sender {
    if (self.delegate && [self.delegate respondsToSelector:@selector(didClickPlayBtn)]) {
        [self.delegate didClickPlayBtn];
    }
}

#pragma mark - UIGestureRecognizerDelegate
- (void)actionTapGesture:(UITapGestureRecognizer *)sender {
    CGPoint touchPoint = [sender locationInView:self.progressV];
    float value = (self.progressV.maximumValue - self.progressV.minimumValue) * (touchPoint.x / self.progressV.width);
    [self.progressV setValue:value animated:YES];
    
    if (self.delegate && [self.delegate respondsToSelector:@selector(didSliderTouchEnded:)]) {
        [self.delegate didSliderTouchEnded:value];
    }
    
    DSLog(@"actionTapGestureactionTapGesture:%f", value);
}

#pragma mark - public
- (void)setIsPlaying:(BOOL)isPlaying {
    _isPlaying = isPlaying;
    self.playerBtn.selected = isPlaying;
}

- (SoundPlayMode)mode {
    return self.circleBtn.tag;
}

#pragma mark - lazy
- (UIButton *)dismissBtn {
    if (!_dismissBtn) {
        _dismissBtn = [[UIButton alloc] initWithFrame:CGRectMake(15, kStatusBarHeight + 19, 30, 30)];
        [_dismissBtn dk_setImage:DKImagePickerWithNames(@"home_close", @"dk_home_close", @"home_close") forState:UIControlStateNormal];
        [_dismissBtn addTarget:self action:@selector(dismiss) forControlEvents:UIControlEventTouchUpInside];
    }
    return _dismissBtn;
}

- (UIImageView *)audioPicIV {
    if (!_audioPicIV) {
        _audioPicIV = [UIImageView new];
        [_audioPicIV cornerRadius:72.0];
        _audioPicIV.dk_alphaPicker = DKAlphaPickerWithAlphas(1.0, .5, .5);
    }
    return _audioPicIV;
}

- (UILabel *)audioNameLab {
    if (!_audioNameLab) {
        _audioNameLab = [UILabel labWithFont:BoldFont(16)];
        _audioNameLab.textAlignment = NSTextAlignmentCenter;
        _audioNameLab.dk_textColorPicker = DKColorPickerWithColors(MainTextColor, ColorFromHex(0xE8E9E9), DSWhite);
    }
    return _audioNameLab;
}

- (UISlider *)progressV {
    if (!_progressV) {
        _progressV = [UISlider new];
        [_progressV cornerRadius:2.0];
        _progressV.minimumTrackTintColor = BrandColor;
        _progressV.dk_maximumTrackTintColorPicker = DKColorPickerWithColors(ColorFromHex(0xE3E1E1), ColorFromHex(0x131724), DSWhite);
        [_progressV setThumbImage:[UIImage imageNamed:@"muse_slider_thumbImage"] forState:UIControlStateNormal];
        [_progressV addTarget:self action:@selector(progresssBtnClick:) forControlEvents:UIControlEventValueChanged];
        [_progressV addTarget:self action:@selector(sliderTouchDown:) forControlEvents:UIControlEventTouchDown];
        [_progressV addTarget:self action:@selector(sliderTouchUpInSide:) forControlEvents:UIControlEventTouchUpInside];
        
        // 为UISlider添加点击事件
        _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionTapGesture:)];
        _tapGesture.delegate = self;
        [_progressV addGestureRecognizer:_tapGesture];
    }
    return _progressV;
}

- (UILabel *)proLeftLb {
    if (!_proLeftLb) {
        _proLeftLb = [UILabel labWithFont:SysFont(12)];
        _proLeftLb.textAlignment = NSTextAlignmentLeft;
        _proLeftLb.dk_textColorPicker = DKColorPickerWithColors(ColorFromHex(0xAAAAAA), ColorFromHex(0x5A6073), DSWhite);
    }
    return _proLeftLb;
}

- (UILabel *)proRightLb {
    if (!_proRightLb) {
        _proRightLb = [UILabel labWithFont:SysFont(12)];
        _proRightLb.textAlignment = NSTextAlignmentRight;
        _proRightLb.dk_textColorPicker = DKColorPickerWithColors(ColorFromHex(0xAAAAAA), ColorFromHex(0x5A6073), DSWhite);
    }
    return _proRightLb;
}

- (UIButton *)playerBtn {
    if (!_playerBtn) {
        _playerBtn = [UIButton new];
        [_playerBtn addTarget:self action:@selector(playerBtnClick:) forControlEvents:UIControlEventTouchUpInside];
        [_playerBtn dk_setBackgroundImage:DKImagePickerWithNames(@"audio_play_icon", @"dk_audio_play_icon", @"dk_audio_play_icon") forState:UIControlStateNormal];
        [_playerBtn dk_setBackgroundImage:DKImagePickerWithNames(@"audio_pause", @"dk_audio_pause", @"dk_audio_pause") forState:UIControlStateSelected];
    }
    return _playerBtn;
}

- (UIButton *)leftPlayBtn {
    if (!_leftPlayBtn) {
        _leftPlayBtn = [UIButton new];
        [_leftPlayBtn addTarget:self action:@selector(leftPlayBtnClick:) forControlEvents:UIControlEventTouchUpInside];
        [_leftPlayBtn setBackgroundImage:[UIImage imageNamed:@"previous_icon"] forState:UIControlStateNormal];
    }
    return _leftPlayBtn;
}

- (UIButton *)rightPlayBtn {
    if (!_rightPlayBtn) {
        _rightPlayBtn = [UIButton new];
        [_rightPlayBtn addTarget:self action:@selector(rightPlayBtnClick:) forControlEvents:UIControlEventTouchUpInside];
        [_rightPlayBtn setBackgroundImage:[UIImage imageNamed:@"next_icon"] forState:UIControlStateNormal];
    }
    return _rightPlayBtn;
}

- (SPButton *)playerListBtn {
    if (!_playerListBtn) {
        _playerListBtn = [[SPButton alloc] initWithImagePosition:SPButtonImagePositionTop];
        _playerListBtn.imageTitleSpace = 2;
        [_playerListBtn addTarget:self action:@selector(playerListBtnClick:) forControlEvents:UIControlEventTouchUpInside];
        [_playerListBtn setTitleColor:SmallTextColor forState:UIControlStateNormal];
        _playerListBtn.titleLabel.font = SysFont(12);
        [_playerListBtn dk_setImage:DKImagePickerWithNames(@"playlist_icon", @"dk_playlist_icon", @"playlist_icon") forState:UIControlStateNormal];
        [_playerListBtn setTitle:@"播放列表" forState:UIControlStateNormal];
    }
    return _playerListBtn;
}

- (SPButton *)circleBtn {
    if (!_circleBtn) {
        _circleBtn = [[SPButton alloc] initWithImagePosition:SPButtonImagePositionTop];
        _circleBtn.imageTitleSpace = 2;
        [_circleBtn addTarget:self action:@selector(circelBtnClick:) forControlEvents:UIControlEventTouchUpInside];
        [_circleBtn setTitleColor:SmallTextColor forState:UIControlStateNormal];
        _circleBtn.titleLabel.font = SysFont(12);
        [_circleBtn dk_setImage:DKImagePickerWithNames(@"single_play", @"dk_single_play", @"single_play") forState:UIControlStateNormal];
        _circleBtn.tag = SoundPlayModeSingle;
        [_circleBtn setTitle:@"单节播放" forState:UIControlStateNormal];
    }
    return _circleBtn;
}

- (SPButton *)closeBtn {
    if (!_closeBtn) {
        _closeBtn = [[SPButton alloc] initWithImagePosition:SPButtonImagePositionTop];
        _closeBtn.imageTitleSpace = 2;
        [_closeBtn addTarget:self action:@selector(timeDefineClick:) forControlEvents:UIControlEventTouchUpInside];
        [_closeBtn setTitleColor:SmallTextColor forState:UIControlStateNormal];
        _closeBtn.titleLabel.font = SysFont(12);
        [_closeBtn dk_setImage:DKImagePickerWithNames(@"time_close_icon", @"dk_time_close_icon", @"time_close_icon") forState:UIControlStateNormal];
        [_closeBtn setTitle:@"定时关闭" forState:UIControlStateNormal];
    }
    return _closeBtn;
}

@end