[自定义组件之三]利用calyer实现进度条效果

#import <UIKit/UIKit.h>

@interface ProgressView : UIView

@property (nonatomic,assign,setter=setProgressValue:) float progressValue;
-(void)setProgressValue:(float)progressValue;
@end

#import "ProgressView.h"

@interface ProgressView ()
@property (nonatomic,strong) CALayer* proLayer;
@property (nonatomic,strong) CATextLayer* textLayer;
@end
@implementation ProgressView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.proLayer = [CALayer layer];
        self.proLayer.backgroundColor = [[UIColor redColor] CGColor];
        self.proLayer.frame = CGRectMake(0, 0, 0, frame.size.height);
        [self.layer addSublayer:self.proLayer];
        
        self.textLayer = [CATextLayer layer];
        self.textLayer.backgroundColor = [[UIColor clearColor] CGColor];
        self.textLayer.fontSize = 14;
        self.textLayer.foregroundColor = [[UIColor blackColor] CGColor];
        self.textLayer.alignmentMode = @"center";
        self.textLayer.frame = CGRectMake(0, 0, frame.size.width, frame.size.height);
        [self.layer addSublayer:self.textLayer];

    }
    return self;
}

-(void)setProgressValue:(float)progressValue
{
    _progressValue = progressValue;
    if (_progressValue<=0) {
        self.proLayer.frame = CGRectMake(0, 0, 0, self.frame.size.height);
    }
    else if (_progressValue>=1){
        self.proLayer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    }
    else{
        self.proLayer.frame = CGRectMake(0, 0, self.frame.size.width * _progressValue,
                                         self.frame.size.height);
    }
    self.textLayer.string = [NSString stringWithFormat:@"%.0f%%",round(_progressValue * 100) ];
}
@end
#import "ViewController.h"
#import "ProgressView.h"

@interface ViewController ()
@property (nonatomic,strong) CALayer* layer;
@property (nonatomic,strong) ProgressView* proView;
@property (nonatomic,strong) NSTimer* timer1;
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    self.proView = [[ProgressView alloc] initWithFrame:CGRectMake(100, 200, 100, 20)];
    self.proView.layer.borderWidth = 1;    
    [self.view addSubview:self.proView];
    self.timer1 = [NSTimer scheduledTimerWithTimeInterval:1
                                                   target:self
                                                 selector:@selector(ProgressChange)
                                                 userInfo:nil
                                                  repeats:YES];
}

-(void)ProgressChange
{
    float value = arc4random() % 100 / 100.f;
    self.proView.progressValue = value;
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end
能有动画效果,来自极客学院

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值