NoisePlayCell.m 6.7 KB
//
//  NoisePlayCell.m
//  DreamSleep
//
//  Created by peter on 2022/5/13.
//

#import "NoisePlayCell.h"

@interface NoisePlayCell ()
@property (nonatomic, strong) UIView *bgView;
@property (nonatomic, strong) UIImageView *audioIcon;
@property (nonatomic, strong) UILabel *nameLab;
@property (nonatomic, strong) UIImageView *volumeIcon;
@property (nonatomic, strong) UISlider *volumeSlider;
@property (nonatomic, strong) UIButton *deleteBtn;
@end

@implementation NoisePlayCell {
    UITapGestureRecognizer *_tapGesture;
}

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        self.dk_backgroundColorPicker = DKColorPickerWithKey(TabBarBG);
        self.selectionStyle = UITableViewCellSelectionStyleNone;
        
        [self.contentView addSubview:self.bgView];
        [self.bgView addSubview:self.audioIcon];
        [self.bgView addSubview:self.nameLab];
        [self.bgView addSubview:self.volumeIcon];
        [self.bgView addSubview:self.volumeSlider];
        [self.bgView addSubview:self.deleteBtn];
        
        [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.contentView).offset(15);
            make.right.equalTo(self.contentView).offset(-15);
            make.top.equalTo(self.contentView);
            make.bottom.equalTo(self.contentView).offset(-12);
        }];
        [self.audioIcon mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.left.equalTo(self.bgView).offset(8);
            make.size.mas_equalTo(CGSizeMake(30, 30));
        }];
        [self.nameLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerX.equalTo(self.audioIcon);
            make.top.equalTo(self.audioIcon.mas_bottom).offset(2);
            make.bottom.equalTo(self.bgView).offset(-8);
        }];
        [self.volumeIcon mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.audioIcon.mas_right).offset(12);
            make.top.equalTo(self.bgView).offset(17);
            make.size.mas_equalTo(CGSizeMake(30, 30));
        }];
        [self.volumeSlider mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.volumeIcon.mas_right).offset(8);
            make.right.equalTo(self.deleteBtn.mas_left).offset(-8);
            make.height.equalTo(@15);
            make.centerY.equalTo(self.volumeIcon);
        }];
        [self.deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(self.bgView).offset(17);
            make.size.mas_equalTo(CGSizeMake(30, 30));
            make.right.equalTo(self.bgView).offset(-8);
        }];
    }
    return self;
}

- (void)setModel:(NoiseAudioModel *)model {
    _model = model;
    
    [self.audioIcon yy_setImageWithURL:[NSURL URLWithString:model.audio_pic] placeholder:[UIImage imageNamed:@"basicPlaceholder"]];
    self.nameLab.text = model.audio_name;
}

- (void)setVolumn:(float)volumn {
    _volumn = volumn;
    self.volumeSlider.value = volumn;
}

- (void)setIndexPath:(NSIndexPath *)indexPath {
    _indexPath = indexPath;
}

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

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

- (void)sliderTouchDown:(UISlider *)sender {
    _tapGesture.enabled = NO;
}

- (void)sliderTouchUpInSide:(UISlider *)sender {
    _tapGesture.enabled = YES;
}

#pragma mark - UIGestureRecognizerDelegate
- (void)actionTapGesture:(UITapGestureRecognizer *)sender {
    CGPoint touchPoint = [sender locationInView:self.volumeSlider];
    float value = (self.volumeSlider.maximumValue - self.volumeSlider.minimumValue) * (touchPoint.x / self.volumeSlider.width);
    [self.volumeSlider setValue:value animated:YES];
    if (self.delegate && [self.delegate respondsToSelector:@selector(didSetVolume:indexPath:)]) {
        [self.delegate didSetVolume:value indexPath:self.indexPath];
    }
}

#pragma mark - lazy
- (UIView *)bgView {
    if (!_bgView) {
        _bgView = [UIView new];
        _bgView.dk_backgroundColorPicker = DKColorPickerWithColors(BGColor, ColorFromHex(0x1F263F), DSWhite);
        [_bgView cornerRadius:12.0];
    }
    return _bgView;
}

- (UIImageView *)audioIcon {
    if (!_audioIcon) {
        _audioIcon = [UIImageView new];
    }
    return _audioIcon;
}

- (UILabel *)nameLab {
    if (!_nameLab) {
        _nameLab = [UILabel labWithFont:SysFont(12.0)];
        _nameLab.textAlignment = NSTextAlignmentCenter;
        _nameLab.dk_textColorPicker = DKColorPickerWithColors(MainTextColor, ColorFromHex(0xE8E9E9), DSWhite);
    }
    return _nameLab;
}

- (UIImageView *)volumeIcon {
    if (!_volumeIcon) {
        _volumeIcon = [[UIImageView alloc] dk_initWithImagePicker:DKImagePickerWithNames(@"noise_volume_icon", @"dk_noise_volume_icon", @"dk_noise_volume_icon")];
    }
    return _volumeIcon;
}

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

- (UIButton *)deleteBtn {
    if (!_deleteBtn) {
        _deleteBtn = [UIButton new];
        [_deleteBtn dk_setImage:DKImagePickerWithNames(@"noise_delete_icon", @"dk_noise_delete_icon", @"noise_delete_icon") forState:UIControlStateNormal];
        [_deleteBtn addTarget:self action:@selector(deleteAction:) forControlEvents:UIControlEventTouchUpInside];
    }
    return _deleteBtn;
}

@end