zoukankan      html  css  js  c++  java
  • iOS-CALayer实现简单进度条

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

     */

     自定义一个UIView,创建CALayer

    #import <UIKit/UIKit.h>

    @interface WJProgressView : UIView

    @property (nonatomic,assign)CGFloat progress;//进度参数取值范围0~100
    @property (nonatomic,strong)UIColor *progressColor;//颜色

    @end
    #import "WJProgressView.h"

    @interface WJProgressView ()

    @property (nonatomic,strong)CALayer *progressLayer;
    @property (nonatomic,assign)CGFloat currentViewWidth;

    @end

    @implementation WJProgressView

    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            self.progressLayer = [CALayer layer];
            self.backgroundColor = [UIColor grayColor];
            self.progressLayer.backgroundColor = [UIColor redColor].CGColor;
            self.progressLayer.frame = CGRectMake(000, frame.size.height);
            [self.layer addSublayer:self.progressLayer];
            //储存当前view的宽度值
            self.currentViewWidth = frame.size.width;
        }
        return self;
    }

    #pragma mark - 重写setter,getter方法

    @synthesize progress = _progress;
    - (void)setProgress:(CGFloat)progress {
        _progress = progress;
        if (progress <= 0) {
            self.progressLayer.frame = CGRectMake(000, self.frame.size.height);
        }else if (progress <= 1) {
            self.progressLayer.frame = CGRectMake(00, progress *self.currentViewWidth, self.frame.size.height);
        }else {
            self.progressLayer.frame = CGRectMake(00, self.currentViewWidth, self.frame.size.height);
        }
    }

    - (CGFloat)progress {
        return _progress;
    }

    @synthesize progressColor = _progressColor;
    - (void)setProgressColor:(UIColor *)progressColor {
        _progressColor = progressColor;
        self.progressLayer.backgroundColor = progressColor.CGColor;
    }

    - (UIColor *)progressColor {
        return _progressColor;
    }

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

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

     效果图:

     

  • 相关阅读:
    LinqPad 1.31 提供下载
    LINQ to SQL更新数据库操作
    电脑开机进入桌面很慢的解决办法
    VS2008的Linq更新数据就那么费劲
    将图片进行base64编码,并将接受编码后的图片转换为实际图片
    C# 2.0 之 static class
    测试杀毒软件的性能代码
    VS2008 Ajax Toolkit 控件(修正后转载)
    C#发送邮件程序 及测试邮件服务器
    asp.net中的<%%>形式的详细用法实例讲解
  • 原文地址:https://www.cnblogs.com/hxwj/p/4665924.html
Copyright © 2011-2022 走看看