开发者社区> goodboy_heyang> 正文

iOS之UI--Quartz2D的入门应用--重绘下载圆形进度条

简介:
+关注继续查看

iOS之重绘下载圆形进度条

开发须知快速预览:
 
1、关于了解PI的数值:
2、- (void)drawRect:(CGRect)rect 相关: 这个方法只在self对应的控件首次创建系统会执行,为了能够达到重绘的作用, 就需要重新绘制调用这个drawRect方法,但是推荐使用一下方法: rect其实就是self本身,关于self的不变的数据,可以抽取出来优化。
效果展示:


根据效果展示应该能够很快知道需求吧,然后根据需求开始的开发过程:

1、拖拽需要的UI控件,并设置相关的属性


2、创建UIView的子类HYProgress,并将storyboard的这个绿色的UIView控件Class设置为HYProgress


3、在ViewController.m中拖线创建UISlider的事件监听的方法,通过sender.value能够获取selider的百分比对应的小数数值
在ViewController.m中通过拖线获取HYprogress的引用,因为需要将sender.value传递给这个HYProgress对象
最后通过HYProgress展示出来。

4、在HYprogress.m中,因为要操作子控件UILabel用于显示需要的信息,所以要拖线获得其引用。
但是这么直接是不会成功。至于为什么我也不知道,不过不要深究,下一步就是解决这个问题的方法。请看下一步。


5、解决拖线的问题,先创建IBOutlet代码,然后从代码左边的拖线点拖到右边的UILabel对象上就OK了。


6、创建属性progress并重写set方法,然后还要在set方法中实现对获得的progress的值进行相关的加载处理,比如
self.label.text = ...... ;


7、最后直接看代码,这个代码不是特别多,也不是特别复杂:
复制代码
 1 #import "HYProgress.h"  2  3 @interface HYProgress ()
 4  5 /** 子控件UILabel */  6 @property (nonatomic,weak)IBOutlet UILabel *label;
 7  8 /** 宽 */  9 @property (nonatomic,assign)CGFloat w;
10 /** 高 */ 11 @property (nonatomic,assign)CGFloat h;
12 13 @end 14 15 @implementation HYProgress
16 17 -(void)awakeFromNib{
18  [self setup];
19 }
20 21 -(void)setProgress:(CGFloat)progress{
22 23 _progress = progress;
24 self.label.text = [NSString stringWithFormat:@"%.2f%%",_progress*100];
25 26  [self setNeedsDisplay];
27 28 }
29 30 31 #pragma mark - 初始化绘图需要的数值
32 -(void)setup{
33 //因为drawRext传入的参数rect就是self本身 34 self.w = self.bounds.size.width;
35 self.h = self.bounds.size.height;
36 37 }
38 39 40 - (void)drawRect:(CGRect)rect {
41 // Drawing code 42 43 44 45 CGFloat endA = -M_PI_2 + M_PI * self.progress*2;
46 //2、创建贝塞尔曲线 47 UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.w *0.5, self.h*0.5)
48 radius:self.w*0.5-5 49 startAngle:-M_PI_2
50  endAngle:endA clockwise:YES];
51 52 [path setLineWidth:4];
53  [[UIColor redColor] setStroke];
54 55 // Path operations on the current graphics context 56  [path stroke];
57 58 }
59 60 61 @end
复制代码


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《从零到一:IOS平台TensorFlow入门及应用详解(附源》电子版地址
从零到一:IOS平台TensorFlow入门及应用详解(附源
15 0
《从零到一:IOS平台TensorFlow入门及应用详解(附源码)》电子版地址
从零到一:IOS平台TensorFlow入门及应用详解(附源码)
25 0
iOS音视频入门AVAudioSession
`AVAudioSession`是苹果用来管理App对音频硬件(I / O)的资源使用;比如说: - 设置APP与其他APP是否混音,或者中断、降低其他App声音 - 手机静音下,APP是否可以播放声音 - 指定音频输入或者输出设备 - 是否支持APP录制,是否可以边录制边播放 - 声音中断的优先级(电话接入中断APP音频处理)
120 0
【IOS 开发】Objective - C 入门 之 数据类型详解(二)
【IOS 开发】Objective - C 入门 之 数据类型详解(二)
117 0
【IOS 开发】Objective - C 入门 之 数据类型详解(一)
【IOS 开发】Objective - C 入门 之 数据类型详解(一)
75 0
iOS开发60分钟入门
本文面向已有其它语言(如Java,C,PHP,Javascript)编程经验的iOS开发初学者,初衷在于让我的同事一小时内了解如何开始开发iOS App,学习目标包括: 能使用Xcode IDE、模拟器 能修改、调试已有iOS App 能在已有应用内创建新模块 能创建新应用 能发布应用到App Store
360 0
[译] 如果只有一个月入门 iOS:我该如何学习呢?
本文讲的是[译] 如果只有一个月入门 iOS:我该如何学习呢?,直到去年,我一直都在从事 Android 平台的开发。当时,我对 iOS 开发没有任何的概念,甚至从来没有用过 Apple 的产品。但这一切都是过去式了,现在我已经能够同时进行 iOS 和 Android 应用的开发了。
1092 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Facebook iOS App技术演化十年之路
立即下载
From Java_Android to Swift iOS
立即下载
深入剖析 iOS 性能优化
立即下载