iOS-CALayer实现简单进度条

/**
 *  用CALayer定制下载进度条控件
 *  1.单独创建出CALayer
 *  2.直接修改CALayer的frame值,执行隐式动画,实现进度条效果
 *  3.用定时器(NSTimer)模拟网络下载时提供的百分比数据
 *  4.将CALayer封装进UIView子类中定制进度条控件

 */

 自定义一个UIView,创建CALayer

#import <UIKit/UIKit.h>

@interface WJProgressView : UIView

@property (nonatomic,assign)CGFloat progress; // 进度参数取值范围0~100
@property (nonatomic,strong)UIColor *progressColor; // 颜色

@end
#import  " WJProgressView.h "

@interface WJProgressView ()

@property (nonatomic,strong)CALayer *progressLayer;
@property (nonatomic,assign)CGFloat currentViewWidth;

@end

@implementation WJProgressView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
     if (self) {
        self.progressLayer = [CALayer layer];
        self.backgroundColor = [UIColor grayColor];
        self.progressLayer.backgroundColor = [UIColor redColor].CGColor;
        self.progressLayer.frame = CGRectMake( 000, frame.size.height);
        [self.layer addSublayer:self.progressLayer];
         // 储存当前view的宽度值
        self.currentViewWidth = frame.size.width;
    }
     return self;
}

#pragma mark - 重写setter,getter方法

@synthesize progress = _progress;
- ( void)setProgress:(CGFloat)progress {
    _progress = progress;
     if (progress <=  0) {
        self.progressLayer.frame = CGRectMake( 000, self.frame.size.height);
    } else  if (progress <=  1) {
        self.progressLayer.frame = CGRectMake( 00, progress *self.currentViewWidth, self.frame.size.height);
    } else {
        self.progressLayer.frame = CGRectMake( 00, self.currentViewWidth, self.frame.size.height);
    }
}

- (CGFloat)progress {
     return _progress;
}

@synthesize progressColor = _progressColor;
- ( void)setProgressColor:(UIColor *)progressColor {
    _progressColor = progressColor;
    self.progressLayer.backgroundColor = progressColor.CGColor;
}

- (UIColor *)progressColor {
     return _progressColor;
}

 向上面那样封装的话,只需改变progress进度属性就能改变CALayer的frame(隐式动画)

self.progressView.progress = arc4random()% 100/ 100.f;

 效果图:

 

 

 

转载于:https://www.cnblogs.com/hxwj/p/4665924.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值