ColorfulProgressView

效果

说明

1. 支持颜色定制

2. 进度条动画可以自己控制

3. 简单易用

源码

https://github.com/YouXianMing/UI-Component-Collection

//
// ColorfulProgressView.h
// ColorfulProgressView
//
// Created by YouXianMing on 15/7/13.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import <UIKit/UIKit.h>
#import "ProgressColor.h" @interface ColorfulProgressView : UIView /**
* 进度
*/
@property (nonatomic) CGFloat progress; /**
* 进度颜色(不设置的话有默认值)
*/
@property (nonatomic, strong) ProgressColor *progressColor; /**
* 配置生效以及开始运行
*/
- (void)configAvailableAndBegin; /**
* 便利构造器方法
*
* @param frame 尺寸
* @param progressColor 颜色值,可以为空
*
* @return 实例对象
*/
+ (instancetype)colorfulProgressViewWithFrame:(CGRect)frame progressColor:(ProgressColor *)progressColor; @end
//
// ColorfulProgressView.m
// ColorfulProgressView
//
// Created by YouXianMing on 15/7/13.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import "ColorfulProgressView.h" @interface ColorfulProgressView () { /**
* 当前view宽度
*/
CGFloat _width; /**
* 当前view高度
*/
CGFloat _height;
} @property (nonatomic, strong) UIView *baseView;
@property (nonatomic, strong) CAGradientLayer *gradientLayer; @end @implementation ColorfulProgressView #pragma mark - 初始化与初始设置
- (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self setup];
} return self;
} - (void)setup { _width = self.frame.size.width;
_height = self.frame.size.height; // baseView
self.baseView = [[UIView alloc] initWithFrame:CGRectMake(, , , _height)];
self.baseView.layer.masksToBounds = YES;
[self addSubview:self.baseView]; // 渐变色Layer
self.gradientLayer = [CAGradientLayer layer];
self.gradientLayer.frame = self.bounds;
[self.baseView.layer addSublayer:self.gradientLayer];
} #pragma mark -
- (void)configAvailableAndBegin { // 如果没有设置ProgressColor,则自己生成一个
if (_progressColor == nil) { _progressColor = [ProgressColor new]; NSMutableArray *cgColors = [NSMutableArray array];
for (NSInteger deg = ; deg <= ; deg += ) {
UIColor *color = [UIColor colorWithHue:1.0 * deg / 360.0 saturation:1.0 brightness:1.0 alpha:1.0];
[cgColors addObject:(id)[color CGColor]];
} _progressColor.cgColors = cgColors;
} self.gradientLayer.colors = _progressColor.cgColors;
self.gradientLayer.startPoint = _progressColor.startPoint;
self.gradientLayer.endPoint = _progressColor.endPoint; [self doAnimation];
} - (void)doAnimation { NSArray *fromColors = _progressColor.cgColors;
NSArray *toColors = [_progressColor accessColors];
_progressColor.cgColors = toColors; CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"colors"]; animation.fromValue = fromColors;
animation.toValue = toColors;
animation.duration = _progressColor.duration; animation.removedOnCompletion = YES;
animation.fillMode = kCAFillModeForwards;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.delegate = self; self.gradientLayer.colors = toColors; [self.gradientLayer addAnimation:animation forKey:@"animateGradient"];
} #pragma mark - 动画代理
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { [self doAnimation];
} #pragma mark - 便利构造器
+ (instancetype)colorfulProgressViewWithFrame:(CGRect)frame progressColor:(ProgressColor *)progressColor { ColorfulProgressView *progressView = [[self alloc] initWithFrame:frame]; if (progressColor) {
progressView.progressColor = progressColor;
} [progressView configAvailableAndBegin]; return progressView;
} #pragma mark - 重写getter,setter方法
@synthesize progress = _progress;
- (void)setProgress:(CGFloat)progress { _progress = progress; if (progress <= ) {
_baseView.frame = CGRectMake(, , , _height);
} else if (progress <= ) {
_baseView.frame = CGRectMake(, , _progress * _width, _height);
} else {
_baseView.frame = CGRectMake(, , _width, _height);
}
} - (CGFloat)progress { return _progress;
} @end
//
// ProgressColor.h
// ColorfulProgressView
//
// Created by YouXianMing on 15/7/13.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import <Foundation/Foundation.h>
#import <UIKit/UIKit.h> @interface ProgressColor : NSObject /**
* 存储的是CGColor的数组元素
*/
@property (nonatomic, strong) NSArray *cgColors; /**
* 颜色起始点
*/
@property (nonatomic) CGPoint startPoint; /**
* 颜色结束点
*/
@property (nonatomic) CGPoint endPoint; /**
* 颜色移位一次的动画时间
*/
@property (nonatomic) NSTimeInterval duration; /**
* -----------[ 子类可以重写该方法 ]-----------
*
* 转换颜色的算法
*
* @return 移位后的颜色数组
*/
- (NSArray *)accessColors; #pragma mark - 便利构造器方法(自己添加方法)
+ (ProgressColor *)redGradientColor; + (ProgressColor *)yellowGradientColor; @end
//
// ProgressColor.m
// ColorfulProgressView
//
// Created by YouXianMing on 15/7/13.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import "ProgressColor.h" @implementation ProgressColor #pragma mark - 默认配置
- (instancetype)init {
self = [super init];
if (self) { [self setup];
} return self;
} - (void)setup { self.startPoint = CGPointMake(.f, 0.5f);
self.endPoint = CGPointMake(.f, 0.5f);
self.duration = 0.1f;
} #pragma mark - 切换颜色的算法
- (NSArray *)accessColors { NSMutableArray *mutable = [_cgColors mutableCopy]; id last = [mutable lastObject];
[mutable removeLastObject];
[mutable insertObject:last atIndex:]; NSArray *colors = [NSArray arrayWithArray:mutable]; return colors;
} #pragma mark - 便利构造器
+ (ProgressColor *)redGradientColor { ProgressColor *color = [ProgressColor new]; NSMutableArray *cgColors = [NSMutableArray array]; [cgColors addObject:(id)[[UIColor colorWithRed:0.2f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.2f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.3f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.4f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.5f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.6f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.7f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.8f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.9f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:1.0f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:1.0f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:1.0f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:1.0f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:1.0f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:1.0f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:1.0f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:1.0f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.9f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.8f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.7f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.6f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.5f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.4f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.3f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.2f green:.f blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed:0.2f green:.f blue:.f alpha:.f] CGColor]]; color.cgColors = cgColors;
color.duration = 0.1f; return color;
} + (ProgressColor *)yellowGradientColor { ProgressColor *color = [ProgressColor new]; NSMutableArray *cgColors = [NSMutableArray array]; [cgColors addObject:(id)[[UIColor colorWithRed: green:0.1 blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed: green:0.2 blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed: green:0.3 blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed: green:0.3 blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed: green:0.2 blue:.f alpha:.f] CGColor]];
[cgColors addObject:(id)[[UIColor colorWithRed: green:0.1 blue:.f alpha:.f] CGColor]]; color.cgColors = cgColors;
color.duration = 0.5f; return color;
} @end

细节

[控件] ColorfulProgressView的更多相关文章

  1. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  2. HTML5 progress和meter控件

    在HTML5中,新增了progress和meter控件.progress控件为进度条控件,可表示任务的进度,如Windows系统中软件的安装.文件的复制等场景的进度.meter控件为计量条控件,表示某 ...

  3. 百度 flash html5自切换 多文件异步上传控件webuploader基本用法

    双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...

  4. JS与APP原生控件交互

    "热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...

  5. UWP开发必备:常用数据列表控件汇总比较

    今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...

  6. 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~

    一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...

  7. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  8. Windows API 设置窗口下控件Enable属性

    参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-put.html http://www.yuanjiaocheng.net/we ...

  9. VB.NET设置控件和窗体的显示级别

    前言:在用VB.NET开发射频检测系统ADS时,当激活已存在的目标MDI子窗体时,被其他子窗体遮住了,导致目标MDI子窗体不能显示. 这个问题怎么解决呢?网上看到一篇帖子VB.NET设置控件和窗体的显 ...

随机推荐

  1. protocol buffer开发指南

    ProtoBuf 是一套接口描述语言(IDL)和相关工具集(主要是 protoc,基于 C++ 实现),类似 Apache 的 Thrift).用户写好 .proto 描述文件,之后使用 protoc ...

  2. Linux-(diff)

    diff 命令 1.命令格式: diff  [参数]  [文件1或目录1]  [文件2或目录2] 2.命令功能: diff命令能比较单个文件或者目录内容.如果指定比较的是文件,则只有当输入为文本文件时 ...

  3. paxos协议更新日志

    基于Paxos协议的数据同步与传统主备方式最大的区别在与Paxos只需任意超过半数的副本在线且相互通信正常,就可以保证服务的持续可用,且数据不丢失. Basic paxos协议更新日志 我们将数据持久 ...

  4. 桌面程序开发入门(WinForm with C#)

    1.使用Visual Studio 2013创建新项目 2.创建一个主窗体和4个子窗体 3.创建一个数据库.一个表.一个存储过程 4.在配置文件里添加数据库连接字符串 5.真正的编码工作. 第一步:创 ...

  5. DC综合及仿真验证和DFT测试

           综合技术是提高设计产能的一个很重要的技术,没有综合技术的发展就不可能用HDL实现电路的设计,因为HDL开始是用来供电路仿真建模使用的,到了后来才把其中一部分子集作为可综合的语言,也就是R ...

  6. JSON必知必会

    知识点比较杂,简单的以列表形式罗列知识点 1.json是基于javascript对象字面量的,所以他们看起来很像.但是js对象字面量不需要给名称-值对中的名称两边加上双引号.而在JSON中,却是必要的 ...

  7. 微信小程序开发,服务器端获取不到请求参数

    微信的request请求请求方式为 GET 时,可以在后台获取到请求的参数 userName 当为POST请求时则获取不到 userName 参数 解决方案是 在 设置一下 headers 里添加 ' ...

  8. “App.exe 以附加有调试器,但没有将该调试器配置为调试此未经处理的异常。”

    目前不清楚原因,但是将项目文件放到C盘就可以正常调试运行. 记录一下

  9. Jupyter Notebook 快速入门[转]

    Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言.在本文中,我们将介绍 Jupyter notebook 的主要特性,以 ...

  10. mac系统终端sudo免输入密码技能get

    1.需要在/etc/sudoers中配置. 这个文件的权限是r/r/n,配置之前需要加写权限. sudo chmod u-w /etc/sudoers 2.打开命令窗口sudo visudo 或者 s ...