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
  • 相关阅读:
    2017级面向对象程序设计 作业三
    2017级面向对象程序设计 作业二
    2017级面向对象程序设计 作业一
    寒假作业之总结
    寒假第三次作业
    寒假第二次作业 与电梯有关的代码问题
    我印象中最深刻的三位老师
    Alpha冲刺Day5
    Alpha冲刺Day4
    Alpha冲刺Day3
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4107001.html
Copyright © 2011-2022 走看看