iOS开发Quartz2D 三 进度条的应用

一:效果如图:

二:代码

#import "ViewController.h"
#import "ProgressView.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *valueTitle;
@property (weak, nonatomic) IBOutlet ProgressView *progressView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)valueChange:(UISlider *)sender {

    //获取进度值
    NSLog(@"%f",sender.value);
    //%在stringWithFormat有特殊的含义,不能直接使用,如果想要使用用两个%代表一个%
    self.valueTitle.text = [NSString stringWithFormat:@"%.2f%%",sender.value * 100];

    self.progressView.progressValue = sender.value;

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

1.搭建界面.

2.拖动滑竿的时候让他里面的能够跟着我的拖动,数字在改变.

数字改变时有一个注意点, 就是要显示%,它是一个特殊的符号,要用两个%%代表一个%

3.拖动滑竿的时候就是在上面画弧.

从最上面,按顺时针画,所以,它的起始角度是-90度.结束角度也是-90度

也是从起始角度开始画,

起始角度-90度, 看你下载进度是多少

假如说你下载进度是100,就是1 * 360度

也就是说这个进度占你360度多少分之一

CGContextRef ctx = UIGraphicsGetCurrentContext();

CGPoint center = CGPointMake(50, 50);

CGFloat radius = rect.size.width * 0.5;

CGFloat startA = -M_PI_2;

CGFloat endA = -M_PI_2 + M_PI * 2 * progress;

UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center

radius:radius

startAngle:startA

endAngle:endA

clockwise:YES];

要获得Progress的值,这个进度值没有, 所以要传进来才能画.弄一个成员变量

要在值改变的时候就要传进来.

要拿到ProgressView才能够传进来,所以要拖线,拿到ProgressView

所有都做好的, 发现没有画圆孤?

为什么?

问题:drawRect方法总共调用多少次?

总共就调用一次, 第一次Progress为0,以后都不会执行了

解决:每次传的时候,就要画一次,

重写Progress方法

-(void)setProgress:(CGFloat)progress{

_progress = progress;

手动调用drawRect方法, 让它重新绘制

[self drawRect:self.bounds];

}

运行发现还是不画,为什么?

原因:drawRect方法是不能手动调用,因为在drawRect方法中才能获取跟View相关联的上下文

系统在调用DrawRect方法时,会自动帮你创建一个跟View相关联的上下文,并且传递给它.

自己调用的,没有给drawRect方法传递上下文.所以在draw方法中拿不到上下文.

解决办法:想要重绘,调用[self setNeedsDisplay];

告诉系统重新绘制View,系统就会自动帮你调用drawRect方法,系统在调用

drawRect方法,它会帮你创建上下文

时间: 2024-08-25 08:24:30

iOS开发Quartz2D 三 进度条的应用的相关文章

iOS开发网络篇—文件下载(三·进度条)

一.实现下载文件进度控制 1.代码示例 1 #import "YYViewController.h" 2 3 @interface YYViewController () 4 @property(nonatomic,strong)NSMutableData *fileData; 5 @property(nonatomic,strong)NSFileHandle *writeHandle; 6 @property(nonatomic,assign)long long currentLen

文顶顶 iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发中三种简单的动画设置

iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所有动画提交并生成动

从零开始学ios开发(三):第一个有交互的app

感谢大家的关注,也给我一份动力,让我继续前进.有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12点了,就要去睡了,现在身体汤不牢啊,如果不早点睡,第二天上班肯定没精神,要靠红牛了,呵呵,在这样的情况下再挤出时间学习ios真的很困难,只能是见缝插针,抓紧一切可用的时间学习,时间,挤一挤总归是有的,只是多少问题. 这几天看来书的第三章,主要讲了如何添加按钮,然后为按钮添加响应事件,当点击按钮后,触

iOS开发 - Quartz2D绘图

Quartz 2D简介 是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 - - drawRect:方法的使用 常见图形的绘制:线条.多边形.圆 绘图状态的设置:文字颜色.线宽等 图形上下文状态的保存与恢复 图形上下文栈 为了便于搭建美观的UI界面,iOS提供了UIKit框架,里面有各种各样的UI控件 UILabel:显示文字 UIImag

【iOS】环形渐变进度条实现

之前有人在找渐变进度条的效果,闲来无事就顺手写了一个,然后画了视图层级,方便讲解. 环境信息: Mac OS X 10.10.3 Xcode 6.3.1 iOS 8.3 效果图: 源码下载地址: https://github.com/saitjr/LoopProgressDemo.git 正文 一.视图层级 首先需要搞定的就是视图层级关系.可以看到, 1. 背景是有透明度的蓝色(blueView) 2. 需要一个从绿->黄->红的渐变色,那个这里我采用的是Layer(colorLayer) 3

Java Swing程序开发—右下角显示进度条

虽然自己不喜欢Java的GUI程序,但是工作原因,听从上级安排. 转入正题:这篇文章实现在桌面右下角显示一个进度条,显示当前程序运行的进度.而且鼠标能够拖动进度条.有需要的童鞋,可以直接拷贝代码过去使用! Java参考代码: import java.awt.Dimension; import java.awt.Insets; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.Mouse

ios线程练习更新进度条

类似于,我们加载网页时候的进度条,我们来看看它们是怎么工作的. #import "ViewController.h" @interface ViewController () { UIProgressView *_view; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //设置进度条 _view = [[UIProgressView alloc]init]; _view