StoryPlayView.m 8.2 KB
//
//  StoryPlayView.m
//  DreamSleep
//
//  Created by peter on 2022/10/21.
//

#import "StoryPlayView.h"
#import "DSSlider.h"

@interface StoryPlayView () <UIGestureRecognizerDelegate>
@property (nonatomic, strong) UIButton *dismissBtn;
@property (nonatomic, strong) UIImageView *audioPicIV;
@property (nonatomic, strong) UILabel *audioNameLab;
@property (nonatomic, strong) DSSlider *progressV;
@property (nonatomic, strong) UILabel *proLeftLb;
@property (nonatomic, strong) UILabel *proRightLb;
@property (nonatomic, strong) UIButton *playerBtn;
@property (nonatomic, strong) UITapGestureRecognizer *tapGR;
@end

@implementation StoryPlayView

- (instancetype)initWithDelegate:(id<StoryPlayViewDelegate>)delegate {
    if (self = [super init]) {
        self.delegate = delegate;
        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.audioPicIV mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerX.equalTo(self);
            make.width.height.equalTo(@144);
            make.top.equalTo(self).offset(198);
        }];
        [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.top.equalTo(self.audioNameLab.mas_bottom).offset(160);
        }];
        [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.top.equalTo(self.progressV.mas_bottom).offset(63);
        }];
    }
    return self;
}

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

- (void)updatePlayingState:(BOOL)isPlaying {
    self.playerBtn.selected = isPlaying;
}

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

#pragma mark - private
- (void)dismiss {
    if (self.delegate && [self.delegate respondsToSelector:@selector(stopAudioAndDismiss)]) {
        [self.delegate stopAudioAndDismiss];
    }
}

- (void)playAction {
    if (self.delegate && [self.delegate respondsToSelector:@selector(playOrPauseControl)]) {
        [self.delegate playOrPauseControl];
    }
}

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

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

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

#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];
    }
}

#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;
}

- (DSSlider *)progressV {
    if (!_progressV) {
        _progressV = [DSSlider new];
        [_progressV cornerRadius:2.0];
        _progressV.minimumTrackTintColor = BrandColor;
        _progressV.dk_maximumTrackTintColorPicker = DKColorPickerWithColors(ColorFromHex(0xE3E1E1), AlertDarkColor, DSWhite);
        [_progressV setThumbImage:[UIImage imageNamed:@"muse_slider_thumbImage"] forState:UIControlStateNormal];
        [_progressV addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
        [_progressV addTarget:self action:@selector(sliderTouchDown:) forControlEvents:UIControlEventTouchDown];
        [_progressV addTarget:self action:@selector(sliderTouchUpInSide:) forControlEvents:UIControlEventTouchUpInside];
        
        // 为UISlider添加点击事件
        UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionTapGesture:)];
        tapGesture.delegate = self;
        [_progressV addGestureRecognizer:tapGesture];
        self.tapGR = 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(playAction) 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;
}

@end