用CALayer实现下载进度条

用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.f
                                              target:self
                                            selector:@selector(timerEvent)
                                            userInfo:nil
                                             repeats: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
时间: 2024-12-21 10:43:36

用CALayer实现下载进度条的相关文章

android 进度条更新-Android关于下载进度条更新问题

问题描述 Android关于下载进度条更新问题 @Override protected Bitmap doInBackground(String... params) { Bitmap bitmap=null; ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); InputStream inputStream=null; try { HttpClient httpClient=new DefaultHttpClient(

软件-java程序设计 下载 进度条显示

问题描述 java程序设计 下载 进度条显示 当我在一个页面点击下载下载软件时,能否将名称和进度条显示在另一个页面 我需要用java实现程序设计,如果可以的话麻烦贴出代码,在百度上看了很多, 没有找到可以使用的,谢谢了 解决方案 天生java做activex也很困难.不如用C++ 解决方案二: 如果是基于浏览器的话,不可以实现.因为服务器端程序不能直接控制浏览器读写文件,也不能获知下载进度. 除非你在客户端部署程序,比如activex控件. 解决方案三: 迅雷就是我说的,在客户端部署程序实现的.

android-Android 下载进度条传递问题!!!分都不是事

问题描述 Android 下载进度条传递问题!!!分都不是事 50C 有一个下载管理器,在下载的时候能得到进度条,我要怎么把进度条传到另一个Activity,当另一个Activity打开的时候能得到从mainActivity中得到进度条,并且动态改变进度条可能会有多个下载任务!!!!!!!!!!!!!!!!!!!!真的很急求大家帮帮忙 解决方案 解决方案二: android下载时,通知栏进度条卡死问题 解决方案三: 在mainActivity里面通过handler发送消息到另外一个activti

asp.net下载进度条111

问题描述 asp.net下载进度条111 各位高手: 我用asp.net在服务器 生成一个 excel,然后 下载到 客户端 .这个 过程 很慢 ,怎样加 进度条 呢?求救 .[asp.net][下载][进度条] 解决方案 把excel生成放在后台线程里做,参考 http://www.cnblogs.com/ensleep/p/3459919.html 解决方案二: ASP.NET 进度条asp.net進度條ASP.NET实现进度条

js文章下载进度条代码

提示:您可以先修改部分代码再运行 js文章下载进度条代码 提示:您可以先修改部分代码再运行

使用HTML5实现下载进度条效果

HTML5是HTML下一个主要的修订版本,现在仍处于发展阶段.目标是取代1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在互联网应用迅速发展的时候,使网络标准达到符合当代的网络需求.广义论及HTML5时,实际指的是包括HTML.CSS和JavaScript在内的一套技术组合.它希望能够减少浏览器对于需要插件的丰富性网络应用服务(plug-in-based rich internet application,RIA),如Adobe Flash.Microsoft Silverl

HTML5实现下载进度条效果代码

HTML5是HTML下一个主要的修订版本,现在仍处于发展阶段.目标是取代1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在互联网应用迅速发展的时候,使网络标准达到符合当代的网络需求.广义论及HTML5时,实际指的是包括HTML.CSS和JavaScript在内的一套技术组合.它希望能够减少浏览器对于需要插件的丰富性网络应用服务(plug-in-based rich internet application,RIA),如Adobe Flash.Microsoft Silverl

asp.net WinForm下载文件并显示下载进度条教程

WinForm下载文件并显示下载进度示例  代码如下 复制代码 /// <summary> /// 显示进度 /// </summary> /// <param name="val"></param> private void ProgressBar_Value(int val) {     progressBar1.Value = val;     label1.Text = val.ToString() + "%"

PS绘制彩色WEB下载进度条教程

  素材下载 背景 纹理 图案下载 第一步: 新建一个600X400PX的画布,把我们提供的纹理丢进去 现在我们使用"圆角矩形工具",设置半径为"10PX",拉出一个长条矩形 第二步: 现在我们来设置矩形的混合样式,把它命名为:矩形1.然后双击图层,设置如下: -内发光:颜色就是默认的黑色 图案叠加: 这个图案需要加载"艺术表明",默认的里面有 分类: PS鼠绘教程