zoukankan      html  css  js  c++  java
  • 用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
  • 相关阅读:
    QT开发之旅一DS7400主机调试工具
    读《程序员,你伤不起》杂感(附带分享两个项目源码)
    这些年过上幸福生活的程序员(中篇)
    这些年过上幸福生活的程序员(上篇)
    如果第三方数据表与系统数据库里的表名格式不一致的解决方案
    数据库设计原则
    MYSQL密码设置
    关于phpmyadmin #1045无法登陆服务器的问题
    TP快捷函数
    跨控制器调用
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4107001.html
Copyright © 2011-2022 走看看