圆形进度条

#import <UIKit/UIKit.h>

@interface CircleProgressView : UIView

/**起始值(0-1)*/
@property(nonatomic,assign)CGFloat fstartValue;

/**边框宽度*/
@property(nonatomic,assign)CGFloat flineWidth;

/**线条颜色*/
@property(nonatomic,strong)UIColor *lineColor;

/**变化的值*/
@property(nonatomic,assign)CGFloat fvalue;
@end
#import "CircleProgressView.h"
@interface CircleProgressView ()
{
    CAShapeLayer *_shapeLayer;
}
@end
@implementation CircleProgressView
@synthesize fstartValue=_fstartValue;
@synthesize flineWidth=_flineWidth;
@synthesize lineColor=_lineColor;
@synthesize fvalue=_fvalue;

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        /**创建带形状的图层*/
        _shapeLayer=[CAShapeLayer layer];
        _shapeLayer.frame     = self.bounds;
        _shapeLayer.strokeEnd = 0.f;

        /*创建布赛尔曲线*/
        UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.bounds];

        /**把图层和不塞尔曲线通过path进行关联*/
        _shapeLayer.path   = path.CGPath;

        /**设置图层的填充颜色、宽度、边框颜色*/
        _shapeLayer.fillColor   = [UIColor clearColor].CGColor;
        _shapeLayer.lineWidth   = 1.0f;
        _shapeLayer.strokeColor = [UIColor redColor].CGColor;

        [self.layer addSublayer:_shapeLayer];
    }
    return self;
}
/**
 *  @brief  重写fstartValue的setter方法
 *  @param fstartValue  设置圆形strokeStart起始值
 *  @since
 */
- (void)setFstartValue:(CGFloat)fstartValue
{
    _fstartValue          = fstartValue;
    _shapeLayer.strokeStart = fstartValue;

}
- (CGFloat)fstartValue
{
    return _fstartValue;
}
/**
 *  @brief  重写flineWidth的setter方法
 *  @param flineWidth  设置圆形边框宽度
 *  @since
 */

- (void)setFlineWidth:(CGFloat)flineWidth
{
    _flineWidth           = flineWidth;
    _shapeLayer.lineWidth = flineWidth;
}
/**
 *  @brief  重写lineColor的setter方法
 *  @param lineColor  设置圆形边框颜色
 *  @since
 */

- (void)setLineColor:(UIColor *)lineColor
{
    _lineColor              = lineColor;
    _shapeLayer.strokeColor = lineColor.CGColor;
}
- (UIColor *)lineColor
{
    return _lineColor;
}
/**
 *  @brief  重写fvalue的setter方法
 *  @param lineColor  设置圆形的strokeEnd值
 *  @since
 */
- (void)setFvalue:(CGFloat)fvalue
{
    _fvalue                = fvalue;
    _shapeLayer.strokeEnd = fvalue;
}

- (CGFloat)fvalue
{
    return _fvalue;
}
@end
#import "ViewController.h"
#import "CircleProgressView.h"
@interface ViewController ()
{
    CircleProgressView *progress;
}
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    progress             = [[CircleProgressView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
    progress.center      = self.view.center;
    progress.lineColor   = [UIColor redColor];
    progress.flineWidth  = 1.0f;
    progress.fstartValue = 0;
    [self.view addSubview:progress];
    [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(circleAnimation) userInfo:nil repeats:YES];

}
- (void)circleAnimation
{
    progress.fvalue = arc4random()%100/100.f;
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

}

@end
时间: 2024-08-25 00:32:34

圆形进度条的相关文章

利用css3动画和border来实现圆形进度条

最近在学习前端的一些知识,发现border的功能十分强大啊! 首先来看看demo 就是这么一个圆形的进度条,在文本框中输入0-100的数值下面的进度条相应的转到多少 这个主要是利用border,旋转和css动画来实现的,主要思想是利用两个div来互相遮挡border形成的一个只有半圈有颜色的圆形,再利用旋转div的角度来调整显示 上代码: html+css+js(这里引入了jquery) <!DOCTYPE html> <html lang="en"> <

自定义圆形进度条

关于控件呢,我想大家应该都很熟悉了吧,android应用开发MVC架构中,控件担任着至关重要的作用,感觉可以说是基于控件的事件模型人机交互的基础吧.这种特性感觉在wpf开发中体现得更为直接,感兴趣的同学可以去了解一下.而android框架自身就已经给我们提供了很多控件.那么问题来了?为什么有那么多控件可以用,你还要去屑自定义控件呢?是因为大家闲的蛋疼吗?显然不是.个人认为只要有两方面吧,要么是觉得有些原生控件是在是丑得难以忍受(即使是在你已经自定义了他的shape,圆角,selector等一系列

Android自定义View——圆形进度条式按钮

介绍 今天上班的时候有个哥们问我怎么去实现一个按钮式的进度条,先来看看他需要实现的效果图. 和普通的圆形进度条类似,只是中间的地方有两个状态表示,未开始,暂停状态.而且他说圆形进度的功能已经实现了.那么我们只需要对中间的两个状态做处理就行了. 先来看看实现的效果图: 上面说了我们只需要处理中间状态的变化就可以了,对于进度的处理直接使用了弘洋文章中实现: http://blog.csdn.net/lmj623565791/article/details/43371299 下面开始具体实现. 具体实

Html5基于SVG的扁平风格圆形进度条javascript插件教程

一.使用方法 使用该圆形进度条需要引入circleDonutChart.js文件. <script type="text/javascript" src="circleDonutChart.js"></script> 二.Html结构 你可以使用一个空的<div>元素来制作圆形进度条. <div id="example1"></div> 三.初始化插件 要制作圆形进度条,可以使用下面的方

Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)

转载请注明地址:http://blog.csdn.net/xiaanming/article/details/10298163 很多的时候,系统自带的View满足不了我们功能的需求,那么我们就需要自己来自定义一个能满足我们需求的View,自定义View我们需要先继承View,添加类的构造方法,重写父类View的一些方法,例如onDraw,为了我们自定义的View在一个项目中能够重用,有时候我们需要自定义其属性,举个很简单的例子,我在项目中的多个界面使用我自定义的View,每个界面该自定义View

CAShapeLayer实现圆形进度条效果

一.CAShapeLayer简介: 1.CAShapeLayer继承至CALayer,可以使用CALayer的所有属性值 2.CAShapeLayer需要与贝塞尔曲线配合使用才有意义 3.使用CAShapeLayer与贝塞尔曲线可以实现不在view的drawRect方法中画出一些想要的图形 4.CAShapeLayer属于CoreAnimation框架,其动画渲染直接提交到手机的GPU当中,相较于view的drawRect方法使用CPU渲染而言,其效率极高,能大大优化内存使用情况 五角星动画 #

WPF 实现圆形进度条

项目中用到圆形进度条,首先就想到使用 ProgressBar 扩展一个,在园子里找到 迷途的小榔头 给出的思路和部分代码,自己加以实现.在此感谢 迷途的小榔头! 进度小于60显示红色,大于60则显示绿色.效果如下: 基本思路: 本质上是一个进度条,只是外观有别于矩形进度条,所以需要修改ProgressBar的ControlTemplate. 进度条部分实际是一个扇形,用WPF动态绘出(原理参考迷途的小榔头讲解). 要将进度条的值(Value依赖属性)转换为进度条,需要一个Converter. 根

HTML5动画(二):Canvas 实现圆形进度条并显示数字百分比

实现效果 1.首先创建html代码 <canvas id="canvas" width="500" height="500" style="background:#000;"></canvas> 2.创建canvas环境 var canvas = document.getElementById('canvas'), //获取canvas元素 context = canvas.getContext('2d

Android绘制圆形进度条

一.背景介绍 我们在项目中,经常会见到圆形进度条,看起来很美观.直观.刚好最近项目中有这样的需求,记录一下,顺便回顾下自定义View的知识. 二.实现思路 自定义View,就是在画布中绘制View,需要重写onDraw方法.该View可以拆分成以下几部分: 1)需要画一个浅绿色的圆 2)需要画一个白色的圆 3)圆圈中有进度数字的显示 4)圆圈中可以自定义顶部和底部不同文案的提示 三.主要方法介绍 1.drawArc:由上图可以看出,该圆需要画出圆弧表示进度,所以选择drawArc(RectF o

Qt第三方圆形进度条-及其改进

Qt第三方圆形进度条的改进 要实现一个圆形的进度条功能,在网上找到一个比较出名的第三方封装类:QRoundProgressBar,地址:sourceforge 的 QRoundProgressBar 功能封装的还是不错,提供了3种模式,线形.圆环.饼状.使用过程中发现圆环进度条对背景透明支持不够完善,内圆的背景无法实现透明,为了解决此问题,下面对此控件进行了一些修订,实现完整的圆形进度条. QRoundProgressBar目前存在的不足 QRoundProgressBar在带背景图片widge