十五,UISlider的使用,分段,加粗等以及进度条的使用

 1,在开发中很多时候会用到进度条,或者进度条等,比如视频播放进度,下载进度,图片上传进度等等这些下面把我遇到的几种进度条相似的方法说一下

2,加粗方法

(1)使用继承的重写方法。代码如下

#import <UIKit/UIKit.h>

@interface SliderCustom : UISlider

- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds;
- (CGRect)maximumValueImageRectForBounds:(CGRect)bounds;
- (CGRect)trackRectForBounds:(CGRect)bounds;
//- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value;

@end

#import "SliderCustom.h"

@implementation SliderCustom

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/
- (CGRect)maximumValueImageRectForBounds:(CGRect)bounds
{
    return CGRectMake(0, 0, CGRectGetWidth(self.frame)/ 2, CGRectGetHeight(self.frame) / 2);
}
// 设置最小值
- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds
{
    return CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
}

// 控制slider的宽和高,这个方法才是真正的改变slider滑道的高的
- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame));
}
@end


(2) 使用CGAffineTransform改变UIProgressView的指定高度

CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 8.0f);
    _progressView.transform = transform;

3,一些比较好的第三方的介绍(个人看法)

首先是进度条第三方使用MBProgressHUD,可以有圆形进度条,加粗的长形进度条

首先是使用圆形进度条,导入文件,并声明

 @property (nonatomic, strong) MBProgressHUD *proHUD;
触发方法:

- (void)circularprogress{
    UIViewController *vc = [SPAlertMode getCurrentVC];
    //UI操作有时候会用后台线程,这里一律用主线程,避免报错
    dispatch_async(dispatch_get_main_queue(), ^{
        
        [vc.view addSubview:_proHUD];
        
    });
    
    _proHUD = [[MBProgressHUD alloc]initWithView:vc.view];
    _proHUD.color = DB_Black;
    _proHUD.labelColor = DB_Blue;
    //        _proHUD.labelText = @"正在上传";
    
    _proHUD.mode = MBProgressHUDModeAnnularDeterminate;
//    _proHUD.mode = MBProgressHUDModeDeterminateHorizontalBar;
    vc.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6];
    [vc.view addSubview:_proHUD];
    [_proHUD showAnimated:YES whileExecutingBlock:^{
       
        NSProgress * sub =[NSProgress progressWithTotalUnitCount:100];
        int i=0;
        while (i<100) {
            i++;
            sub.completedUnitCount++;
        _proHUD.progress = sub.fractionCompleted;
        _proHUD.labelText = [NSString stringWithFormat:@"%.2f%@",sub.fractionCompleted*100,@"%"];
                        NSLog(@"%f",sub.fractionCompleted);
                        usleep(50000);
            
        }
    }];
 

}
  长兴进度条调用如下
- (void)uploading{
    UIViewController *vc = [SPAlertMode getCurrentVC];
    //UI操作有时候会用后台线程,这里一律用主线程,避免报错
    dispatch_async(dispatch_get_main_queue(), ^{
        
        [vc.view addSubview:_proHUD];
        
    });
    
    _proHUD = [[MBProgressHUD alloc]initWithView:vc.view];
    
    //        _proHUD.labelText = @"正在上传";
    
//    _proHUD.mode = MBProgressHUDModeAnnularDeterminate;
    _proHUD.mode = MBProgressHUDModeDeterminateHorizontalBar;
    vc.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6];
    [vc.view addSubview:_proHUD];
    [_proHUD showAnimated:YES whileExecutingBlock:^{
       
        NSProgress * sub =[NSProgress progressWithTotalUnitCount:100];
        int i=0;
        while (i<100) {
            i++;
            sub.completedUnitCount++;
            _proHUD.progress = sub.fractionCompleted;
            _proHUD.labelText = [NSString stringWithFormat:@"%.2f%@",sub.fractionCompleted*100,@"%"];
            NSLog(@"%f",sub.fractionCompleted);
            usleep(50000);
            
        }
    }];
   
}

4,UISlider好用的第三方CCHStepSizeSlider(个人看法),UISlider在开发中可能会有用户需要节点或者分段来处理,这个第三方的都符合要求

具体使用如下:

CCHStepSizeSlider *slider2 = [[CCHStepSizeSlider alloc] initWithFrame:CGRectMake(20, 400, W - 40, 50)];
    //    slider2.backgroundColor = [UIColor grayColor];
    //    slider2.margin = 100;
    slider2.titleArray = @[@"",@"你好",@"好吗",@"好的"];
    slider2.lineWidth = 5;
    slider2.titleOffset = 23;
    //    slider2.titleColor = [UIColor blueColor];
    slider2.index = 3;
    slider2.stepWidth = 10;
    slider2.sliderOffset = -8;
    slider2.stepTouchRate = 2;
    slider2.thumbSize = CGSizeMake(20, 20);
    slider2.thumbTouchRate = 2;
    //    slider2.numberOfStep = 3;
    slider2.continuous = NO;
    [slider2 addTarget:self action:@selector(valueChangeAction:) forControlEvents:UIControlEventValueChanged];
    
    [self.view addSubview:slider2];
    
}
- (void)valueChangeAction:(CCHStepSizeSlider *)sender {
    NSLog(@"sender :%@,value :%f,index :%ld",sender,sender.value,(long)sender.index);
    
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过使用 AVPlayer 和 AVPlayerLayer 类来实现视频监控进度条和视频回放页面时间轴自定义滑块。下面是一个示例代码片段,演示如何实现: 1.创建一个 AVPlayerLayer,将其添加到您的视图层次结构中,并将其绑定到 AVPlayer。 ``` // 创建 AVPlayer AVPlayer *player = [AVPlayer playerWithURL:[NSURL URLWithString:@"yourVideoURL"]]; [player play]; // 创建 AVPlayerLayer AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame = self.view.bounds; [self.view.layer addSublayer:playerLayer]; ``` 2.创建一个 UISlider,并在滑动滑块时更新 AVPlayer 的当前时间。 ``` // 创建 UISlider UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(50, 400, 300, 20)]; [slider addTarget:self action:@selector(handleSlider:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:slider]; // 滑动滑块处理程序 - (void)handleSlider:(UISlider *)slider { CMTime videoDuration = player.currentItem.duration; double videoDurationSeconds = CMTimeGetSeconds(videoDuration); double newTime = videoDurationSeconds * slider.value; CMTime time = CMTimeMakeWithSeconds(newTime, player.currentTime.timescale); [player seekToTime:time]; } ``` 3.创建一个自定义滑块,并在拖动滑块时更新视频回放页面的时间轴。 ``` // 创建自定义滑块 UIImageView *thumbImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; thumbImageView.image = [UIImage imageNamed:@"yourImage"]; [slider setThumbImage:[UIImage new] forState:UIControlStateNormal]; [slider addSubview:thumbImageView]; // 拖动滑块处理程序 - (void)handlePan:(UIPanGestureRecognizer *)gesture { if (gesture.state == UIGestureRecognizerStateChanged) { CGPoint translation = [gesture translationInView:self.view]; CGPoint newCenter = CGPointMake(slider.thumbCenter.x + translation.x, slider.thumbCenter.y); if (newCenter.x > slider.frame.size.width) { newCenter.x = slider.frame.size.width; } else if (newCenter.x < 0) { newCenter.x = 0; } slider.thumbCenter = newCenter; CMTime videoDuration = player.currentItem.duration; double videoDurationSeconds = CMTimeGetSeconds(videoDuration); double newTime = videoDurationSeconds * (newCenter.x / slider.frame.size.width); CMTime time = CMTimeMakeWithSeconds(newTime, player.currentTime.timescale); [player seekToTime:time]; } } ``` 希望这可以帮助到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值