博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS-CALayer实现简单进度条
阅读量:6582 次
发布时间:2019-06-24

本文共 1888 字,大约阅读时间需要 6 分钟。

/**
 *  用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(
0
0
0, 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(
0
0
0, self.frame.size.height);
    }
else 
if (progress <= 
1) {
        self.progressLayer.frame = CGRectMake(
0
0, progress *self.currentViewWidth, self.frame.size.height);
    }
else {
        self.progressLayer.frame = CGRectMake(
0
0, 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

你可能感兴趣的文章
性能监控(3)&ndash;linux下的iostat命令
查看>>
铸件成型工艺设计
查看>>
[linux]【常用命令】
查看>>
2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置...
查看>>
红米Note 4怎么样刷入开发版启用Root权限
查看>>
centOS 7磁盘管理
查看>>
面试官:看你简历写了熟悉Kafka,它为什么速度会这么快?
查看>>
循环语句脚本
查看>>
SMTP错误码/建议解决方法
查看>>
bluestore设计的特点--2019_6
查看>>
我的友情链接
查看>>
linux中设置静态ip
查看>>
Android学习——HorizontalScollview水平滚动控件
查看>>
我的友情链接
查看>>
Python多线程ping检测机器存活(跨平台版)
查看>>
CIsco 3845 静态DNS条目(ip host)自动消失
查看>>
f2fs系列 之三:目录结构
查看>>
DBMS的工作模式
查看>>
aix文件系统在线扩容
查看>>
swoole教程第一节:进程管理模块(Process)-中(消息队列)
查看>>