本篇写的是实现环形进度条,并带动画效果,要实现这些,仅能通过自己画一个

方法直接看代码  demo下载:LoopProgressViewDemo.zip

为了方便多次调用,用继承UIView的方式

.m文件

 #import <UIKit/UIKit.h>

 @interface LoopProgressView : UIView

 @property (nonatomic, assign) CGFloat progress;

 @end

.h文件

NSTimer的调用并非精确,可以自行百度

这里因为每0.01s启动一次定时器,所以要同步进度条和数字,就将self.progress赋值给动画的duration属性就可以了,duration为动画时间

在使用时我发现如果在tableviewcell中添加了这个环形进度条时有个缺点,就是定时器原本用的是系统的runloop,导致数据显示滞后,所以现更新为子线程里添加定时器,子线程的定时器必须添加

[[NSRunLoop currentRunLoop] run];才可启动定时器,因为子线程的runloop里是不带nstimer的,要手动添加运行

 #import "LoopProgressView.h"
#import <QuartzCore/QuartzCore.h> #define ViewWidth self.frame.size.width //环形进度条的视图宽度
#define ProgressWidth 2.5 //环形进度条的圆环宽度
#define Radius ViewWidth/2-ProgressWidth //环形进度条的半径 @interface LoopProgressView()
{
CAShapeLayer *arcLayer;
UILabel *label;
NSTimer *progressTimer;
}
@property (nonatomic,assign)CGFloat i; @end @implementation LoopProgressView -(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
}
return self;
} -(void)drawRect:(CGRect)rect
{
_i=;
CGContextRef progressContext = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(progressContext, ProgressWidth);
CGContextSetRGBStrokeColor(progressContext, 209.0/255.0, 209.0/255.0, 209.0/255.0, ); CGFloat xCenter = rect.size.width * 0.5;
CGFloat yCenter = rect.size.height * 0.5; //绘制环形进度条底框
CGContextAddArc(progressContext, xCenter, yCenter, Radius, , *M_PI, );
CGContextDrawPath(progressContext, kCGPathStroke); // //绘制环形进度环
CGFloat to = self.progress * M_PI * ; // - M_PI * 0.5为改变初始位置 // 进度数字字号,可自己根据自己需要,从视图大小去适配字体字号
int fontNum = ViewWidth/;
48
 49 label = [[UILabel alloc]initWithFrame:CGRectMake(, ,Radius+10, ViewWidth/)];
     label.center = CGPointMake(xCenter, yCenter);
     label.textAlignment = NSTextAlignmentCenter;
label.font = [UIFont boldSystemFontOfSize:fontNum];
label.text = @"0%";
[self addSubview:label]; UIBezierPath *path=[UIBezierPath bezierPath];
[path addArcWithCenter:CGPointMake(xCenter,yCenter) radius:Radius startAngle: endAngle:to clockwise:YES];
arcLayer=[CAShapeLayer layer];
arcLayer.path=path.CGPath;//46,169,230
arcLayer.fillColor = [UIColor clearColor].CGColor;
arcLayer.strokeColor=[UIColor colorWithRed:227.0/255.0 green:91.0/255.0 blue:90.0/255.0 alpha:0.7].CGColor;
arcLayer.lineWidth=ProgressWidth;
arcLayer.backgroundColor = [UIColor blueColor].CGColor;
[self.layer addSublayer:arcLayer]; dispatch_async(dispatch_get_global_queue(, ), ^{
[self drawLineAnimation:arcLayer];
}); if (self.progress > ) {
NSLog(@"传入数值范围为 0-1");
self.progress = ;
}else if (self.progress < ){
NSLog(@"传入数值范围为 0-1");
self.progress = ;
return;
} if (self.progress > ) {
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(newThread) object:nil];
[thread start];
} } -(void)newThread
{
@autoreleasepool {
progressTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timeLabel) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] run];
}
} //NSTimer不会精准调用
-(void)timeLabel
{
_i += 0.01;
label.text = [NSString stringWithFormat:@"%.0f%%",_i*]; if (_i >= self.progress) {

[progressTimer invalidate];
         progressTimer = nil;

     }

 }

 //定义动画过程
-(void)drawLineAnimation:(CALayer*)layer
{
CABasicAnimation *bas=[CABasicAnimation animationWithKeyPath:@"strokeEnd"];
bas.duration=self.progress;//动画时间
bas.delegate=self;
bas.fromValue=[NSNumber numberWithInteger:];
bas.toValue=[NSNumber numberWithInteger:];
[layer addAnimation:bas forKey:@"key"];
} @end

完成后在要调用的控制器里,仅需几段代码:传进的参数:为0-1

     LoopProgressView *custom = [[LoopProgressView alloc]initWithFrame:CGRectMake(, , , )];
custom.progress = 0.44;
[self.view addSubview:custom];

实现后:

已经实现进度条和数字的同步:

iOS带动画的环形进度条(进度条和数字同步)的更多相关文章

  1. ios - 带动画圆形旋转的进度条

    #import <UIKit/UIKit.h> @interface TJCircleProgressView : UIView /** * 图标 */ @property(nonatom ...

  2. 【iOS实现一个颜色渐变的弧形进度条】

    在Github上看到一些进度条的功能,都是通过Core Graph来实现.无所谓正确与否,但是开发效率明显就差很多了,而且运行效率还是值得考究的.其实使用苹果提供的Core Animation能够非常 ...

  3. 一款基于jquery带百分比的响应式进度加载条

    今天要给大家带来一款基于jquery带百分比的响应式进度加载条.这款加载条非常漂亮,而且带有进度的百度比,且在不同的百分比用的是不同的颜色.而且这款加载条采用了响应式设计,在不同的分辨率的显示器下完美 ...

  4. iOS补位动画、沙漏效果、移动UITableViewCell、模拟贪吃蛇、拖拽进度等源码

    iOS精选源码 JHAlertView - 一款黑白配色的HUD之沙漏效果 继承UIButton的自定义按钮SPButton 用递归算法实现iOS补位动画 iOS 长按移动UITableViewCel ...

  5. Xamarin XAML语言教程使用方法设置进度条进度

    Xamarin XAML语言教程使用方法设置进度条进度 在ProgressBar中定义了一个ProgressTo方法,此方法也可以用来对进度条当前的进行进行设置,ProgressTo与Progress ...

  6. Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度

    Xamarin XAML语言教程使用Progress属性数据绑定设置进度条进度 开发者除了可以为ProgressBar定义的Progress属性直接赋双精度类型的值外,还可以通过数据绑定的方式为该属性 ...

  7. Xamarin XAML语言教程Progress属性设置进度条进度

    Xamarin XAML语言教程Progress属性设置进度条进度 在图12.19~12.21中我们看到的是没有实现加载的进度条,即进度条的当前进度为0,如果开发者想要修改当前进度,可以使用两种方式: ...

  8. IOS下载查看PDF文件(有下载进度)

    IOS(object-c) 下载查看 PDF 其实还是蛮容易操作的.在下载前,首先要把 IOS 可以保存文件的目录给过一遍: IOS 文件保存目录 IOS 可以自定义写入的文件目录,是很有限的,只能是 ...

  9. Android View 之进度条+拖动条+星级评论条....

    PS:将来的你会感谢现在奋斗的自己.... 学习内容: 1.进度条 2.拖动条 3.星级评论条 1.进度条...       进图条这东西想必大家是很熟悉的...为了使用户不会觉得应用程序死掉了,因此 ...

随机推荐

  1. 用2263份证件照图片样本测试how-old.net的人脸识别

    上一年也就是这个时候微软根据自己的人脸识别API推出了一个识别照片中人脸年龄和性别的网站--http://how-old.net,小伙伴们各种玩耍,一年后的今天突发"奇想"地想测试 ...

  2. 写给自己的 程序集&msil 扫盲

    嘴上不说 心里却想MD 这家伙在博客园装了这么久的高手 竟然连这都不会 ,我去噢. 程序集签名 .net 下 “程序集” 什么东东 ,反正就是听着挺牛x的,其实就是指“一堆程序”从我们传统的C++封装 ...

  3. C# 异步工具类 及一点小小的重构经验

    2015年新年第一篇随笔, 祝福虽然有些晚,但诚意还在:新年快乐. 今天主要是想分享一异步工具类,在C/S架构中.先进行网络资源异步访问,然后将回调函数 Invoke到UI线程中进行UI处理. 这样的 ...

  4. C#串口通信—传输文件测试

    说明:该程序可能不具备实用性,仅测试用. 一.使用虚拟串口工具VSPD虚拟两个串口COM1和COM2 二.约定 占一个字节,代码如下: using System; using System.Colle ...

  5. 动态dynamically变更母版_Layout页body标签css的class

    这个功能演示是Insus.NET最近想实现的一个功能,就是动态dynamically变更母版_Layout页body标签的样式css的class. 很多视图共同一个母版_Layout页,但是某一个视图 ...

  6. jQuery的Ajax请求数据时type无法使用GET

    写一个ASP.NET MVC例子,它是使用jQuery的$.Ajax来呼叫控制器的数据. 创建一个视图: 运行结果: 一切正常,但是本例子我们只是获取数据,并没有做任何数据POST上传至控制器,我们尝 ...

  7. 一些C#实用的方法汇总

    代码如下: /// <summary> /// 过滤字符串方法,用于将单引号等特殊符号转化成中文符号 /// </summary> /// <param name=&qu ...

  8. 15天玩转redis —— 第一篇 开始入手

    双十一终于还是过去了,我负责的mongodb由于做了副本集,最终还是挺过去了,同事负责的redis,还是遗憾的在早上8点左右宕机了,然后大家就是马不停 蹄的赶往公司解决问题,因为我对redis也不是很 ...

  9. iOS阶段学习第17天笔记(NSFileManager-NSFileHandle-文件操作)

    iOS学习(OC语言)知识点整理 一.单例模式 1)单例是一种编程思想,一个设计模式,与语言无关在采用了单例对象的应用程序中,需要单例类自行提供实例化单例对象, 不管实例化单例对象多少次,只有一个对象 ...

  10. 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向

    [源码下载] 背水一战 Windows 10 (2) - UI: 概述, 启动屏幕, 屏幕方向 作者:webabcd 介绍背水一战 Windows 10 之 UI UI 设计概述 启动屏幕(闪屏) 屏 ...