iOS进度条 自定义圆角 UIProgressView

本文介绍了如何在iOS应用中自定义UIProgressView的圆角大小,包括通过layer.cornerRadius、UIBezierPath和mask图三种方法。重点讨论了各自的优缺点,如性能和实现难度,并提供了一个GitHub项目的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进度条总结,自定义圆角大小,多种方法定义圆角大小



//实例化一个进度条,有两种样式,一种是UIProgressViewStyleBar一种是UIProgressViewStyleDefault,几乎无区别

    UIProgressView *pro1=[[UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleDefault];

    //设置的高度对进度条的高度没影响,整个高度=进度条的高度,进度条也是个圆角矩形

    //slider滑动控件:设置的高度对slider也没影响,但整个高度=设置的高度,可以设置背景来检验

    pro1.frame=CGRectMake(30, 100, 200, 0);

    //设置进度条颜色

    pro1.trackTintColor=[UIColor yellowColor];

    //设置进度默认值,这个相当于百分比,范围在0~1之间,不可以设置最大最小值

    pro1.progress=0.7;

    //设置进度条上进度的颜色

    pro1.progressTintColor=[UIColor redColor];

   //手动设置圆角

    pro1.layer.masksToBounds = YES;

    pro1.layer.cornerRadius = 2.5;

  //设置进度条宽高,第一个参数为款的倍数,第二个参数为高,此高与frame的高不一样,frame的高不起作用,此高直接决定大小

    CGAffineTransform transform1 = CGAffineTransformMakeScale(1.0f, 5.0f);

    pro1.transform = transform1;//设定宽高

  

    //设置进度条的背景图片

    pro1.trackImage=[UIImage imageNamed:@"logo.png"];

    //设置进度条上进度的背景图片

    pro1.progressImage=[UIImage imageNamed:@"1.png"];

    //设置进度值并动画显示

    [pro1 setProgress:0.7 animated:YES];

    [self.view addSubview:pro1];


自定义圆角大小的方法汇总

方法一、layer.cornerRadius

第一种方法最简单,通过层对象的cornerRadius属性实现圆角效果,代码如下:

view.layer.cornerRadius = 8.0;
view.layer.masksToBounds = YES;

缺点是会有2次rending passes。首先off-screen画出带圆角的图,然后在视图上画第二次。

方法二、通过UIBezierPath对象设置带圆角的作图区域

这种方法的好处是只有一次rending pass,是三种方法中效率最高的。缺点是需要override视图。代码如下:

- (void)drawRect:(CGRect)rect {
CGRect bounds = self.bounds;

[[UIColor whiteColor] set];
UIRectFill(bounds);

[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:8.0] addClip];

[self.image drawInRect:bounds];
}

方法三、通过另一张mask图创建新图


首先需要一张mask图,然后将这张mask图和原图合成,得到带圆角的新图。效率和方法一类似,合成新图等同于在off-screen作图。该方法的优点是可以不局限于圆角,全凭mask图控制。

总结:

如果要效率(例如要提高table view的滚动帧数),就多用方法二。要方便,自然是方法一。如果需要的特殊形状UIBezierPath对象无法构成,则考虑方法三。

例子:https://github.com/weipin/RoundedCorner

例子中,tab 1是无圆角效果,其他三个tab各自对应三种方法。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值