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

*/

自定义一个UIView,创建CALayer

  1. #import <UIKit/UIKit.h>
  2.  
  3. @interface WJProgressView : UIView
  4.  
  5. @property (nonatomic,assign)CGFloat progress;//进度参数取值范围0~100
  6. @property (nonatomic,strong)UIColor *progressColor;//颜色
  7.  
  8. @end
  1. #import "WJProgressView.h"
  2.  
  3. @interface WJProgressView ()
  4.  
  5. @property (nonatomic,strong)CALayer *progressLayer;
  6. @property (nonatomic,assign)CGFloat currentViewWidth;
  7.  
  8. @end
  9.  
  10. @implementation WJProgressView
  11.  
  12. - (instancetype)initWithFrame:(CGRect)frame
  13. {
  14.     self = [super initWithFrame:frame];
  15.     if (self) {
  16.         self.progressLayer = [CALayer layer];
  17.         self.backgroundColor = [UIColor grayColor];
  18.         self.progressLayer.backgroundColor = [UIColor redColor].CGColor;
  19.         self.progressLayer.frame = CGRectMake(, , , frame.size.height);
  20.         [self.layer addSublayer:self.progressLayer];
  21.         //储存当前view的宽度值
  22.         self.currentViewWidth = frame.size.width;
  23.     }
  24.     return self;
  25. }
  26.  
  27. #pragma mark - 重写setter,getter方法
  28.  
  29. @synthesize progress = _progress;
  30. - (void)setProgress:(CGFloat)progress {
  31.     _progress = progress;
  32.     if (progress <= ) {
  33.         self.progressLayer.frame = CGRectMake(, , , self.frame.size.height);
  34.     }else if (progress <= ) {
  35.         self.progressLayer.frame = CGRectMake(, , progress *self.currentViewWidth, self.frame.size.height);
  36.     }else {
  37.         self.progressLayer.frame = CGRectMake(, , self.currentViewWidth, self.frame.size.height);
  38.     }
  39. }
  40.  
  41. - (CGFloat)progress {
  42.     return _progress;
  43. }
  44.  
  45. @synthesize progressColor = _progressColor;
  46. - (void)setProgressColor:(UIColor *)progressColor {
  47.     _progressColor = progressColor;
  48.     self.progressLayer.backgroundColor = progressColor.CGColor;
  49. }
  50.  
  51. - (UIColor *)progressColor {
  52.     return _progressColor;
  53. }

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

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

效果图:

iOS-CALayer实现简单进度条的更多相关文章

  1. 用 CALayer 定制下载进度条控件

    // // RPProgressView.h // CALayer定制下载进度条控件 // // Created by RinpeChen on 16/1/2. // Copyright © 2016 ...

  2. 用CALayer实现下载进度条控件

    用CALayer实现下载进度条 效果: 源码: // // ViewController.m // ProgressView // // Created by YouXianMing on 14/11 ...

  3. wpf 导出Excel Wpf Button 样式 wpf简单进度条 List泛型集合对象排序 C#集合

    wpf 导出Excel   1 private void Button_Click_1(object sender, RoutedEventArgs e) 2 { 3 4 ExportDataGrid ...

  4. 【iOS】环形渐变进度条实现

    之前有人在找渐变进度条的效果,闲来无事就顺手写了一个,然后画了视图层级,方便讲解. 环境信息: Mac OS X 10.10.3 Xcode 6.3.1 iOS 8.3 效果图: 源码下载地址: ht ...

  5. asp.net 的一个简单进度条功能

    我们先看下效果 我点击了按钮后他会显示进度页面,进度完成后,进度条消失,其实也是比较简单的了. 我们需要一个进度条代码文件ProgressBar.htm(注意:是没有head这些标签的) <sc ...

  6. js(ext)中,设置[!!异步!!]上传的简单进度条

    代码在updateHmis的历史记录中,此处存档 handler : function() { //显示进度条 Ext.MessageBox.wait('数据上传中...','提示'); //上传数据 ...

  7. iOS UIWebView 加载进度条的使用-WKWebView的使用,更新2017.6.26

    1.由于项目中加载网络插件,直接使用了webview加载.使用了三方NJKWebViewProgress进度条的使用,近期在测试时发现,网络缓慢时出现白屏,有卡顿现象. 于是采用了WKWebView进 ...

  8. JGUI源码:实现简单进度条(19)

    程序效果如下 实现进度条动画主要有两种方法:(1)使用缓动,(2)使用Jquery Animate,本文使用第二种方法,先实现代码,后续进行控件封装 <style> .jgui-proce ...

  9. python3 简单进度条代码

    进度条代码函数实现 import sys, time class ShowProcess(object): """ 显示处理进度的类 调用该类相关函数即可实现处理进度的显 ...

随机推荐

  1. Java当中的异常

    异常:中断了正常指令流的事件,是JVM虚拟机产生的对象 异常是程序运行时产生的,和编译无关 class Test{ public static void main(String args[]){ Sy ...

  2. c,c++函数返回多个值的方法

    最近遇到一个问题,需要通过一个函数返回多个值.无奈C,C++不能返回多个值.所以就想有什么方法可以解决. 网上方法比较杂乱,一般有两种替代做法: 1. 利用函数的副作用, 返回值在函数外定义, 在函数 ...

  3. C++经典书籍推荐

    <C++程序设计语言> <C++语言设计与演化> <C++标准程序库> <EFFECTIVE C++ 中文版> <MORE EFFECTIVE C ...

  4. DB2递归查询

    斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...

  5. oracle 归档/非归档

    1.查看oralce是归档模式还是非归档模式 SQL> select name,log_mode from v$database; NAME LOG_MODE------------------ ...

  6. Android:简单实现ViewPager+TabHost+TabWidget实现导航栏导航和滑动切换

    viewPager是v4包里的一个组件,可以实现滑动显示多个界面. android也为viewPager提供了一个adapter,此adapter最少要重写4个方法: public int getCo ...

  7. JavaScript 编码风格指南

    A.1  缩进 // 4个空格的层级缩进 if (true) { doSomething(); } A.2  行的长度 // 每行限于80个字符,超出则在运算符后换行,缩进2个层级(8个空格) doS ...

  8. UIButton setImage setBackgoundImage

    setBackgroundImage 会根据button的大小平铺 setImage不会平铺

  9. chmod命令用法

    指令名称 : chmod  使用权限 : 所有使用者  使用方式 : chmod [-cfvR] [--help] [--version] mode file...  说明 : Linux/Unix ...

  10. .net(C#)操作文件的几种方法汇总

    .net(C#)操作文件的几种方法汇总 System.IO命名空间下类的用法:在System.IO名称空间中包含了用于文件输入输出的主要类.File:实用类,提供许多静态方法,用于移动.复制和删除文件 ...