123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- //
- // KSPlayerSliderView.m
- // KulexiuSchoolStudent
- //
- // Created by 王智 on 2023/8/29.
- //
- #import "KSPlayerSliderView.h"
- #import "UIView+KSCovertImage.h"
- @interface KSPlayerSliderView ()<UIGestureRecognizerDelegate>
- @property (weak, nonatomic) IBOutlet UIButton *stautusButton;
- @property (weak, nonatomic) IBOutlet UISlider *progressSlider;
- @property (weak, nonatomic) IBOutlet UILabel *playTime;
- @property (weak, nonatomic) IBOutlet UILabel *fullTime;
- @property (nonatomic, copy) KSPlayerSliderActionCallback callback;
- @property (nonatomic, assign) NSInteger totalDuration;
- //是否正在拖曳进度条
- @property (nonatomic,assign) BOOL isDragingSlider;
- //视频进度条的单击手势&播放器的单击手势
- @property (nonatomic,strong) UITapGestureRecognizer *progressTap;
- @property (nonatomic, assign) BOOL isWhite;
- @end
- @implementation KSPlayerSliderView
- - (void)configViewDisplayColor:(BOOL)isWhite {
- self.isWhite = isWhite;
- if (isWhite) {
- UIView *sliderImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 12, 12)];
- sliderImg.layer.cornerRadius = 6.0f;
- sliderImg.layer.masksToBounds = YES;
- sliderImg.backgroundColor = HexRGB(0xffffff);
- UIImage *image = [UIView convertViewToImage:sliderImg];
- [self.progressSlider setThumbImage:image forState:UIControlStateNormal];
- [self.progressSlider setThumbImage:image forState:UIControlStateHighlighted];
- [self.progressSlider setMinimumTrackTintColor:HexRGB(0xffffff)];
- [self.progressSlider setMaximumTrackTintColor:HexRGBAlpha(0xffffff, 0.3f)];
- self.playTime.textColor = HexRGB(0xffffff);
- self.fullTime.textColor = HexRGB(0xffffff);
- }
- else {
- UIView *sliderImg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 12, 12)];
- sliderImg.layer.cornerRadius = 6.0f;
- sliderImg.layer.masksToBounds = YES;
- sliderImg.backgroundColor = HexRGB(0x2DC7AA);
- UIImage *image = [UIView convertViewToImage:sliderImg];
- [self.progressSlider setThumbImage:image forState:UIControlStateNormal];
- [self.progressSlider setThumbImage:image forState:UIControlStateHighlighted];
- [self.progressSlider setMinimumTrackTintColor:HexRGB(0x2DC7AA)];
- [self.progressSlider setMaximumTrackTintColor:HexRGB(0xffffff)];
-
- self.playTime.textColor = HexRGB(0x131415);
- self.fullTime.textColor = HexRGB(0x131415);
- }
- self.isPlay = NO;
- }
- - (void)awakeFromNib {
- [super awakeFromNib];
- self.playScheduleTime = 0;
-
- //进度条的拖拽事件
- [self.progressSlider addTarget:self action:@selector(stratDragSlide:) forControlEvents:UIControlEventValueChanged];
- //进度条的点击事件
- [self.progressSlider addTarget:self action:@selector(updateProgress:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];
- //给进度条添加单击手势
- self.progressTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionTapGesture:)];
- self.progressTap.delegate = self;
- [self.progressSlider addGestureRecognizer:self.progressTap];
- }
- + (instancetype)shareInstance {
- KSPlayerSliderView *view = [[[NSBundle mainBundle] loadNibNamed:@"KSPlayerSliderView" owner:nil options:nil] firstObject];
- return view;
- }
- - (void)configWithDuration:(NSInteger)totalDuration {
- self.totalDuration = totalDuration;
- self.progressSlider.minimumValue = 0;
- self.progressSlider.maximumValue = totalDuration;
- }
- - (void)sliderControlAction:(KSPlayerSliderActionCallback)callback {
- if (callback) {
- self.callback = callback;
- }
- }
- - (IBAction)playButtonAction:(id)sender {
- self.isPlay = !self.isPlay;
- if (self.callback) {
- PLAYERTYPE type = self.isPlay ? PLAYERTYPE_PLAY : PLAYERTYPE_PAUSE;
- self.callback(type, self.playScheduleTime);
- }
- }
- #pragma mark--开始拖曳sidle
- - (void)stratDragSlide:(UISlider *)slider{
- self.isDragingSlider = YES;
- }
- #pragma mark
- #pragma mark - 播放进度
- - (void)updateProgress:(UISlider *)slider {
- self.playScheduleTime = slider.value;
- self.isDragingSlider = NO;
- if (self.callback) {
- self.callback(PLAYERTYPE_RATE, self.playScheduleTime);
- }
- }
- //视频进度条的点击事件
- - (void)actionTapGesture:(UITapGestureRecognizer *)sender {
- CGPoint touchLocation = [sender locationInView:self.progressSlider];
- CGFloat value = (self.progressSlider.maximumValue - self.progressSlider.minimumValue) * (touchLocation.x/self.progressSlider.frame.size.width);
- [self.progressSlider setValue:value animated:YES];
- [self configScheduleTime:self.progressSlider.value];
- if (self.callback) {
- self.callback(PLAYERTYPE_RATE, self.playScheduleTime);
- }
- }
- - (void)configScheduleTime:(NSInteger)playTime {
- _playScheduleTime = playTime;
- self.playTime.text = [NSString stringWithFormat:@"%.2d:%.2d", (int)(playTime/1000) / 60, (int)(playTime/1000) % 60];
- }
- - (void)setIsPlay:(BOOL)isPlay {
- _isPlay = isPlay;
- NSString *imgName = @"";
- if (isPlay) {
- imgName = self.isWhite ? @"mergePlayer_pause_white" : @"mergePlayer_pause";
- }
- else {
- imgName = self.isWhite ? @"mergePlayer_play_white" : @"mergePlayer_play";
- }
- [self.stautusButton setImage:[UIImage imageNamed:imgName] forState:UIControlStateNormal];
- }
- - (void)setTotalDuration:(NSInteger)totalDuration {
- _totalDuration = totalDuration;
- self.fullTime.text = [NSString stringWithFormat:@"%.2d:%.2d", (int)(totalDuration/1000) / 60, (int)(totalDuration/1000) % 60];
- }
- - (void)setPlayScheduleTime:(NSInteger)playScheduleTime {
- _playScheduleTime = playScheduleTime;
- self.playTime.text = [NSString stringWithFormat:@"%.2d:%.2d", (int)(playScheduleTime/1000) / 60, (int)(playScheduleTime/1000) % 60];
- if (_isDragingSlider == NO) {
- self.progressSlider.value = playScheduleTime;
- }
- }
- /*
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect {
- // Drawing code
- }
- */
- @end
|