用CALayer实现下载进度条

效果:

源码:

//
//  ViewController.m
//  ProgressView
//
//  Created by YouXianMing on 14/11/18.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//#import "ViewController.h"@interface ViewController ()@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, strong) CALayer *layer;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor blackColor];// CALayer_layer                 = [CALayer layer];_layer.frame           = CGRectMake(50, 50, 200, 2);_layer.backgroundColor = [UIColor redColor].CGColor;[self.view.layer addSublayer:_layer];// 定时器_timer = [NSTimer scheduledTimerWithTimeInterval:1.ftarget:selfselector:@selector(timerEvent)userInfo:nilrepeats:YES];
}/***  定时器*/
- (void)timerEvent {// 显式动画_layer.frame = CGRectMake(50, 50, arc4random()%200, 2);
}@end

封装后的源码:

//
//  ProgressView.h
//  ProgressView
//
//  Created by YouXianMing on 14/11/18.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//#import <UIKit/UIKit.h>@interface ProgressView : UIView@property (nonatomic, strong) UIColor *progressColor;
@property (nonatomic, assign) CGFloat  progress;@end
//
//  ProgressView.m
//  ProgressView
//
//  Created by YouXianMing on 14/11/18.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//#import "ProgressView.h"@interface ProgressView (){CALayer   *_backLayer;CGFloat    _frameWidth;CGFloat    _layerWidth;
}@end@implementation ProgressView- (instancetype)initWithFrame:(CGRect)frame
{self = [super initWithFrame:frame];if (self) {_backLayer       = [CALayer layer];_frameWidth      = self.bounds.size.width;_layerWidth      = 0;_backLayer.frame = CGRectMake(0, 0, _layerWidth, frame.size.height);[self.layer addSublayer:_backLayer];}return self;
}@synthesize progressColor = _progressColor;
- (void)setProgressColor:(UIColor *)progressColor {_progressColor             = progressColor;_backLayer.backgroundColor = _progressColor.CGColor;
}
- (UIColor *)progressColor {return _progressColor;
}@synthesize progress = _progress;
- (void)setProgress:(CGFloat)progress {_progress = progress;CGRect rect = _backLayer.frame;if (_progress <= 0) {rect.size.width = 0;} else if (_progress >= 1) {rect.size.width = _frameWidth;} else {rect.size.width = _progress * _frameWidth;}_backLayer.frame = rect;
}
- (CGFloat)progress {return _progress;
}@end

用CALayer实现下载进度条相关推荐

  1. python实现http下载文件-Python HTTP下载文件并显示下载进度条功能的实现

    下面的Python脚本中利用request下载文件并写入到文件系统,利用progressbar模块显示下载进度条. 其中利用request模块下载文件可以直接下载,不需要使用open方法,例如: im ...

  2. Python 技术篇-在cmd命令提示行里模拟动态下载进度条实例演示,cmd清除日志、打印动态内容方法

    模拟进度条的核心就是用 os.system('cls') 不断的来清除屏幕之前的数据,再打印出新的,给人一种动态的感觉. # -*- coding: UTF8 -*- import os import ...

  3. python迅雷下载进度_python 之实现断点下载与下载进度条

    一.效果图 二.进度条代码 __author__ = 'Yang' import os import time from threading import Thread '''下载进度条''' cla ...

  4. 仿苹果AppStore 环形下载进度条

    以前项目自己写的 ,一个模仿苹果AppStore 下载进度条的winfrom用户控件,GDI绘制.效果如图 1 using System.Drawing; 2 using System.Windows ...

  5. progressblock 安卓自定义进度条 progressbar 高仿仿QQ下载进度条

    progressblock 安卓自定义进度条 progressbar 高仿仿QQ下载进度条 附上我在公司做下载播放项目 主要使用方法 progressBlock = (ProgressBlock) f ...

  6. C# 设置下载进度条

    C# 模拟下载进度条: 提示: 设置:开始值 设置:结束值 全部代码: using System; using System.Collections.Generic; using System.Com ...

  7. python小功能 模拟下载进度条打印

    python小功能 模拟下载进度条打印 #!/usr/bin/env python3 # -*- coding:utf-8 -*-import timedef progress(arg):if arg ...

  8. Android中下载进度条格式,Android开发如何实现文件下载进度条

    释放双眼,带上耳机,听听看~! 今天和小编狗在这里学习下载进度的实现吧,这段代码是网上找的,自己做了些小改,通过模拟器测试.文件下载进度条控制(就是为了高清壁纸加个进度条),自己研究了好久,但是进度条 ...

  9. js如何让高度和宽度保持一致_如何实现一个下载进度条/播放进度条

    技术上没太大难度,有难度的地方是怎么让整个动画比较流畅.一个主要问题是动画的滞后性:当下载进度到某个点的时候,你再用250ms的动画过渡过去,这个时候已经慢了,所以很多人可能因为这个原因或者嫌麻烦,直 ...

  10. WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】

    第一步:首先我们创建一个winfor的项目 第二步:我们建一个窗体 在一个窗体里面 打开一个另外的窗体 另外的窗体有一个按钮 点击后就开始下载 下载完成后 在注册窗体上面 显示下载完成(达到在一个窗体 ...

最新文章

  1. 详解 CQRS 架构模式
  2. 【求助】哪个软件负责在屏幕右下角显示类似“caps lock on/off”的? - 技术封存区 - 专门网论坛 -...
  3. 八、爬虫解析利器 PyQuery 的使用
  4. 创建数据库python: can‘t open file ‘manage.py‘: [Errno 2] No such file or directory报错
  5. ES10新特性_字符串扩展方法_trimStart--trimEnd---JavaScript_ECMAScript_ES6-ES11新特性工作笔记058
  6. Facebook 又搞事,违反竞业协议被起诉,PyTorch 关键技术疑侵权
  7. 强悍的命令行 —— basename 去掉路径和扩展名 dirname 获取路径
  8. 温故而知新:new与override的差异以及virtual方法与abstract方法的区别
  9. 新手教学--(常用的存储过程)
  10. 区块链、ICO,养肥的是开发者和一群黑客
  11. 关于iOS实现前台,后台,锁屏或关闭app语音播报
  12. html节点分析,解析html程序(C#版)——遍历各个节点(mshtml)
  13. crm客户管理软件的精髓
  14. FAT文件系统介绍以及FatFs的移植
  15. 计算机搜索功能在分区里失灵,DiskGenius搜索已丢失分区(重建分区表)
  16. DMA驱动框架流程编写
  17. Django+bootstrap启动登录模板页面(Django第三篇)
  18. vue跳转新页面链接以及url 转码
  19. 自动化功能测试-Athrun—IOS学习之旅文档
  20. Windows服务器如何防止黑客入侵的安全设置

热门文章

  1. 数字证书的基础知识(转)
  2. 【快学springboot】使用springboot发送邮件
  3. 推荐一个ajax控件项目 ajax data control
  4. PHP编程中如何做到有效配置Apache
  5. 零元学Expression Blend 4 - Chapter 28 ListBox的基本运用与更改预设样式
  6. 2017-3-2 数据库索引/数据类型/引擎
  7. python 使用多线程进行压力测试
  8. LeetCode_125_Python_验证回文串
  9. java 容器(联系数据结构)
  10. String.format(“0:D2}“,a)字符串格式化