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;

     效果图:

     

  • 相关阅读:
    Redis随记--pubsub学习
    Redis随记--HyperLogLog的代码学习02
    Redis随记--HyperLogLog的代码学习01
    Redis随记--Lazy Free特性
    Redis随记--StreamID生成
    linux 学习笔记 第一天 安装 分区 指定ip 远程链接 2021-03-04
    Oracle ebs 常用标准表
    EBS开发——经常需要修改的触发器
    查询oracle 数据库 SQL语句执行情况
    Oracle中的索引详解(整理)
  • 原文地址:https://www.cnblogs.com/hxwj/p/4665924.html
Copyright © 2011-2022 走看看