iOS开发之使用CALayer封装下载进度条
2015-06-22 22:12
597 查看
效果图 代码 // // XRProgressView.h // 使用CALayer封装下载进度条 // // Created by 寒竹子 on 15/6/14. // Copyright (c) 2015年 寒竹子. All rights reserved. // /** * 下载进度条封装 */ #import <UIKit/UIKit.h> @interface XRProgressView : UIView @property (nonatomic, assign) CGFloat progress; @property (nonatomic, strong) UIColor * progressColor; @end // // XRProgressView.m // 使用CALayer封装下载进度条 // // Created by 寒竹子 on 15/6/14. // Copyright (c) 2015年 寒竹子. All rights reserved. // #import "XRProgressView.h" @interface XRProgressView () @property (nonatomic, strong) CALayer * progressLayer; // 进度layer @property (nonatomic, assign) CGFloat currentWidth; // 当前layer的width @end @implementation XRProgressView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.layer.backgroundColor = [UIColor clearColor].CGColor; self.layer.borderWidth = .5f; // 创建layer _progressLayer = [CALayer layer]; _progressLayer.frame = CGRectMake(0, 0, 0, self.frame.size.height); // 将progressLayer添加到当前View的layer中 [self.layer addSublayer:_progressLayer]; // 保存width _currentWidth = self.frame.size.width; } return self; } #pragma mark - getters and setters @synthesize progress = _progress; // 设置进度 - (void)setProgress:(CGFloat)progress { _progress = progress; if (_progress < 0.0f) { self.progressLayer.frame = CGRectMake(0, 0, 0, self.frame.size.height); }else if (_progress <= 1.0f) { self.progressLayer.frame = CGRectMake(0, 0, _progress * self.currentWidth, self.frame.size.height); }else { self.progressLayer.frame = CGRectMake(0, 0, self.currentWidth, self.frame.size.height); } } - (CGFloat)progress { return _progress; } @synthesize progressColor = _progressColor; // 设置layer背景颜色 - (void)setProgressColor:(UIColor *)progressColor { _progressColor = progressColor; self.progressLayer.backgroundColor = _progressColor.CGColor; } - (UIColor *)progressColor { return _progressColor; } @end // // ViewController.m // 使用CALayer封装下载进度条 // // Created by 寒竹子 on 15/6/14. // Copyright (c) 2015年 寒竹子. All rights reserved. // #define KBorder 20.0f #import "ViewController.h" #import "XRProgressView.h" @interface ViewController () @property (nonatomic, strong) XRProgressView * progressView; @property (nonatomic, strong) NSTimer * timer; @property (nonatomic, assign) CGFloat progress; // 下载进度 @end @implementation ViewController - (instancetype)init { if (self = [super init]) { _progress = 0.0f; } return self; } // 起定时器 - (void)startTimer { _timer = [NSTimer scheduledTimerWithTimeInterval:.1f target:self selector:@selector(updateProgress) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes]; } // 模拟更新下载进度 - (void)updateProgress { if (_progress > 1.0f) { _progress = 0.0f; }else { _progress += .01f; } self.progressView.progress = _progress; } - (void)viewDidLoad { [super viewDidLoad]; self.progressView = [[XRProgressView alloc] initWithFrame:CGRectMake(KBorder, KBorder * 2.0f, self.view.frame.size.width - KBorder * 2.0f, 4.0f)]; self.progressView.layer.masksToBounds = YES; self.progressView.layer.cornerRadius = self.progressView.frame.size.height / 2.0f; self.progressView.progressColor = [UIColor redColor]; [self.view addSubview:self.progressView]; // 开启定时器 [self startTimer]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end |
相关文章推荐
- iOS开发之那些不容错过的技术博客
- 谈谈iOS中粘性动画以及果冻效果的实现
- iOS ARC的打开 与 关闭
- ios 清理cach缓存
- IOS子视图超过父视图frame后,无法交互响应
- nagios插件之监控if8接口日志(新接口)
- Event handling for iOS - how hitTest:withEvent: and pointInside:withEvent: are related?
- (六十五)iOS的socket实现(GCDAsyncSocket)
- (六十五)iOS的socket实现(GCDAsyncSocket)
- OC基础:类的扩展.协议 分类: ios学习 OC 2015-06-22 19:22 34人阅读 评论(0) 收藏
- OC基础:Date 分类: ios学习 OC 2015-06-22 19:16 158人阅读 评论(0) 收藏
- OC基础:block.字面量 分类: ios学习 OC 2015-06-22 19:08 155人阅读 评论(0) 收藏
- (六十四)iOS的socket实现(C+OC混合实现)
- (六十四)iOS的socket实现(C+OC混合实现)
- 【iOS】Mapkit的使用:地图显示、定位、大头针、气泡等
- iOS 观察者模式(KVO)的简单使用
- iOS开发之Xcode6之后不再自动创建Pch预编译文件
- IOS如何生成一枚精美的像素按钮
- IOS菜鸟的所感所思(十三)——数据的图形化
- iOS 的 XMPPFramework 简介