70-Quartz2D的具体使用(画线,三角形,矩形,圆弧,扇形,重绘(下载提示条),画饼图,定时器(雪花下落),模仿系统的控件,矩形变换)
2015-01-21 12:41
323 查看
1.画线
1>添加一根线直接addLineToPoint
//拼接路径
UIBezierPath *path=[UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(50,50)];
[path addLineToPoint:CGPointMake(100, 100)];
2>因为路径是拼接的,默认下一条线的起点是上一条线的终点。
[path addLineToPoint:CGPointMake(100, 300)];
3>设置线条状态
//颜色
[[UIColor redColor] setStroke];
//也可以用:[[UIColor redColor] set];
//宽度
[path setLineWidth:20];
//设置线条顶角样式
//kCGLineCapRound 圆角
[path setLineCapStyle:kCGLineCapRound];
//画第二根线:默认第二根线的起点就是上一根线的终点
[path addLineToPoint:CGPointMake(100, 300)];
//设置线条的交接样式
//kCGLineJoinBevel 正切
[path setLineJoinStyle:kCGLineJoinBevel];
2.画三角形
1>怎样关闭路径:从路径的终点连接到起点
[path closePath];
2>设置图形状态
//设置填充的颜色
[[UIColor redColor] setFill];
//设置描边的颜色
[[UIColor blueColor] setStroke];
3>不同的渲染方式
//渲染上下文
//CGContextStrokePath(ctx);
//填充上下文 前提是路径必须封闭
//CGContextFillPath(ctx);
//既描边又填充
CGContextDrawPath(ctx, kCGPathEOFillStroke);
3.画矩形
在渲染时候只能填充或描边不能既描边又填充:[path fill];
4.画圆弧
- (void)yuanhu
{
/*
Center:圆心
radius:半径
startAngle:起始角度
clockwise:表示顺时针还是逆时针1.顺时针 0.逆时针
*/
UIBezierPath *path=[UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 100) radius:50 startAngle:0 endAngle:-M_PI_2 clockwise:0];
[path stroke];
}
5.画扇形
- (void)shanxing
{
UIBezierPath *path=[UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 100) radius:50 startAngle:0 endAngle:-M_PI_2 clockwise:0];
//添加一根线到圆心
[path addLineToPoint:CGPointMake(100, 100)];
//如果没有封闭路径,系统会自动封闭,关闭路径在填充,从路径的终点连接到起点
[path fill];
}
6.重绘(下载提示条)
1>%在stringWithFormat这个方法中有特殊含义,用两个百分号 %%=%
NSString *text=[NSString stringWithFormat:@"%.2f%%”0.3333*100];
2>不能使用drawRect重绘
//drawRect方法不能手动调用,因为这个方法不会帮我们生成上下文
//[self drawRect:self.bounds];
//只有在这里才能获取上下文,这个上下文是系统系统自动创建
//默认只会调用一次,在控件第一次使用的时候会调用
-(void)drawRect:(CGRect)rect
{
}
3>使用setNeedsDisplay重绘
//setNeedsDisplay 方法底层:底层并不是马上去调用drawRect,重绘
//只是一个标志,给控件重绘的一个标志,等下一次屏幕刷新才会调用drawRect,重绘,然后会生成跟View相关联的上下文
[self setNeedsDisplay];
4>获取UISlider(进度条)的值属性是Value
7.画饼图
1>随机生成颜色
-(UIColor *) randowColor
{
CGFloat r=arc4random_uniform(256)
/255.0;
CGFloat g=arc4random_uniform(256)
/255.0;
CGFloat b=arc4random_uniform(256)
/255.0;
return [UIColor colorWithRed:r green:g blue:b alpha:1];
}
8.使用UIView绘制图片文字矩形
//1>UIView绘制矩形
-(void) juxing
{
//绘制矩形
UIRectFill(CGRectMake(0, 0, 200, 200));
}
//2>绘制文字
- (void) drawText
{
NSString *text=@"在听陈奕迅:遥远的她,内疚”;
//Attributes:
//字典类型:用给给文本框添加一个属性,颜色,字体等
//注意:没办法绘制阴影
NSMutableDictionary *textDic=[NSMutableDictionary dictionary];
//文字颜色
textDic[NSForegroundColorAttributeName]=[UIColor redColor];
//字体大小
textDic[NSFontAttributeName]=[UIFont boldSystemFontOfSize:30];
//空心效果
textDic[NSStrokeWidthAttributeName]=@1;
//绘制文字
//不会自动换行
//[text drawAtPoint:CGPointZero withAttributes:textDic];
//会自动换行
[text drawInRect:self.bounds withAttributes:textDic];
}
//3>绘制图片
-(void) drawImage
{
//裁剪:超出设定范围的东西都会被裁剪
//前提条件:必须要先裁剪,然后绘制内容,因为裁剪会影响到后面的内容
UIRectClip(CGRectMake(0, 0, 100, 100));
//加载图片
UIImage *image=[UIImage imageNamed:@"001"];
//绘制图片
//1>只是设置绘图的位置,默认绘制的内容跟图片的大小一致
//[image drawAtPoint:CGPointZero];
//2>设置绘图内容的尺寸
//[image drawInRect:CGRectMake(0, 0, 100, 100)];
//3>平铺(根据当前View的rectrrrr)
[image drawAsPatternInRect:self.bounds];
}
9.使用UIView绘制文字不能设置阴影,换思路给控件lable设置阴影
- (void)viewDidLoad {
[super viewDidLoad];
//给控件lable设置阴影
NSMutableDictionary *dic=[NSMutableDictionary dictionary];
NSShadow *shadw=[[NSShadow alloc] init];
//阴影距文字的偏移范围
shadw.shadowOffset=CGSizeMake(15, 15);
//阴影颜色
shadw.shadowColor=[UIColor blueColor];
//设置阴影模糊成都
shadw.shadowBlurRadius=2;
dic[NSShadowAttributeName]=shadw;
NSMutableAttributedString *str=[[NSMutableAttributedString alloc] initWithString:@"阿猫阿狗" attributes:dic];
_lable.attributedText=str;
}
10.模仿系统的UIImageVIew
1>必须要知道系统的UIImageVIew有什么功能
a.通过initWithImage方法自动计算frame直接使用,但加载出来的图片和图片本身尺寸一样
b.自己计算frame,显示
2>自定义UIView,给一个Image属性,添加一个类方法
11.定时器
1>NSTimer
特点:当时间小于1秒的时候,一般不使用NSTimer,因为NSTimer的优先级比较低(不能及时运行,不常用)
[NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
2>CADisplayLink
特点:
优先级较高,比较常用:每次刷新屏幕都会调用,每秒调用60次
CADisplayLink *link=[CADisplayLink displayLinkWithTarget:self selector:@selector(timeChange)];
//将link加载到主运行循环
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
12.矩阵变化
-(void)drawRect:(CGRect)rect
{
//1.获取上下文
CGContextRef ctx=UIGraphicsGetCurrentContext();
//2.拼接路径(椭圆)
UIBezierPath *path=[UIBezierPath bezierPathWithOvalInRect:CGRectMake(-50,
-100, 100, 200)];
//===================================================
//上下文矩阵变换:必须在添加路径之前进行矩阵变换
//平移
CGContextTranslateCTM(ctx, 100, 100);
//缩放
CGContextScaleCTM(ctx, 0.5, 0.5);
//旋转
CGContextRotateCTM(ctx, M_PI_4);
//===================================================
//3.添加路径到上下文
CGContextAddPath(ctx, path.CGPath);
//背景颜色
[[UIColor redColor] set];
//4.渲染上下文
CGContextFillPath(ctx);
}
1>添加一根线直接addLineToPoint
//拼接路径
UIBezierPath *path=[UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(50,50)];
[path addLineToPoint:CGPointMake(100, 100)];
2>因为路径是拼接的,默认下一条线的起点是上一条线的终点。
[path addLineToPoint:CGPointMake(100, 300)];
3>设置线条状态
//颜色
[[UIColor redColor] setStroke];
//也可以用:[[UIColor redColor] set];
//宽度
[path setLineWidth:20];
//设置线条顶角样式
//kCGLineCapRound 圆角
[path setLineCapStyle:kCGLineCapRound];
//画第二根线:默认第二根线的起点就是上一根线的终点
[path addLineToPoint:CGPointMake(100, 300)];
//设置线条的交接样式
//kCGLineJoinBevel 正切
[path setLineJoinStyle:kCGLineJoinBevel];
2.画三角形
1>怎样关闭路径:从路径的终点连接到起点
[path closePath];
2>设置图形状态
//设置填充的颜色
[[UIColor redColor] setFill];
//设置描边的颜色
[[UIColor blueColor] setStroke];
3>不同的渲染方式
//渲染上下文
//CGContextStrokePath(ctx);
//填充上下文 前提是路径必须封闭
//CGContextFillPath(ctx);
//既描边又填充
CGContextDrawPath(ctx, kCGPathEOFillStroke);
3.画矩形
在渲染时候只能填充或描边不能既描边又填充:[path fill];
4.画圆弧
- (void)yuanhu
{
/*
Center:圆心
radius:半径
startAngle:起始角度
clockwise:表示顺时针还是逆时针1.顺时针 0.逆时针
*/
UIBezierPath *path=[UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 100) radius:50 startAngle:0 endAngle:-M_PI_2 clockwise:0];
[path stroke];
}
5.画扇形
- (void)shanxing
{
UIBezierPath *path=[UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 100) radius:50 startAngle:0 endAngle:-M_PI_2 clockwise:0];
//添加一根线到圆心
[path addLineToPoint:CGPointMake(100, 100)];
//如果没有封闭路径,系统会自动封闭,关闭路径在填充,从路径的终点连接到起点
[path fill];
}
6.重绘(下载提示条)
1>%在stringWithFormat这个方法中有特殊含义,用两个百分号 %%=%
NSString *text=[NSString stringWithFormat:@"%.2f%%”0.3333*100];
2>不能使用drawRect重绘
//drawRect方法不能手动调用,因为这个方法不会帮我们生成上下文
//[self drawRect:self.bounds];
//只有在这里才能获取上下文,这个上下文是系统系统自动创建
//默认只会调用一次,在控件第一次使用的时候会调用
-(void)drawRect:(CGRect)rect
{
}
3>使用setNeedsDisplay重绘
//setNeedsDisplay 方法底层:底层并不是马上去调用drawRect,重绘
//只是一个标志,给控件重绘的一个标志,等下一次屏幕刷新才会调用drawRect,重绘,然后会生成跟View相关联的上下文
[self setNeedsDisplay];
4>获取UISlider(进度条)的值属性是Value
7.画饼图
1>随机生成颜色
-(UIColor *) randowColor
{
CGFloat r=arc4random_uniform(256)
/255.0;
CGFloat g=arc4random_uniform(256)
/255.0;
CGFloat b=arc4random_uniform(256)
/255.0;
return [UIColor colorWithRed:r green:g blue:b alpha:1];
}
8.使用UIView绘制图片文字矩形
//1>UIView绘制矩形
-(void) juxing
{
//绘制矩形
UIRectFill(CGRectMake(0, 0, 200, 200));
}
//2>绘制文字
- (void) drawText
{
NSString *text=@"在听陈奕迅:遥远的她,内疚”;
//Attributes:
//字典类型:用给给文本框添加一个属性,颜色,字体等
//注意:没办法绘制阴影
NSMutableDictionary *textDic=[NSMutableDictionary dictionary];
//文字颜色
textDic[NSForegroundColorAttributeName]=[UIColor redColor];
//字体大小
textDic[NSFontAttributeName]=[UIFont boldSystemFontOfSize:30];
//空心效果
textDic[NSStrokeWidthAttributeName]=@1;
//绘制文字
//不会自动换行
//[text drawAtPoint:CGPointZero withAttributes:textDic];
//会自动换行
[text drawInRect:self.bounds withAttributes:textDic];
}
//3>绘制图片
-(void) drawImage
{
//裁剪:超出设定范围的东西都会被裁剪
//前提条件:必须要先裁剪,然后绘制内容,因为裁剪会影响到后面的内容
UIRectClip(CGRectMake(0, 0, 100, 100));
//加载图片
UIImage *image=[UIImage imageNamed:@"001"];
//绘制图片
//1>只是设置绘图的位置,默认绘制的内容跟图片的大小一致
//[image drawAtPoint:CGPointZero];
//2>设置绘图内容的尺寸
//[image drawInRect:CGRectMake(0, 0, 100, 100)];
//3>平铺(根据当前View的rectrrrr)
[image drawAsPatternInRect:self.bounds];
}
9.使用UIView绘制文字不能设置阴影,换思路给控件lable设置阴影
- (void)viewDidLoad {
[super viewDidLoad];
//给控件lable设置阴影
NSMutableDictionary *dic=[NSMutableDictionary dictionary];
NSShadow *shadw=[[NSShadow alloc] init];
//阴影距文字的偏移范围
shadw.shadowOffset=CGSizeMake(15, 15);
//阴影颜色
shadw.shadowColor=[UIColor blueColor];
//设置阴影模糊成都
shadw.shadowBlurRadius=2;
dic[NSShadowAttributeName]=shadw;
NSMutableAttributedString *str=[[NSMutableAttributedString alloc] initWithString:@"阿猫阿狗" attributes:dic];
_lable.attributedText=str;
}
10.模仿系统的UIImageVIew
1>必须要知道系统的UIImageVIew有什么功能
a.通过initWithImage方法自动计算frame直接使用,但加载出来的图片和图片本身尺寸一样
b.自己计算frame,显示
2>自定义UIView,给一个Image属性,添加一个类方法
11.定时器
1>NSTimer
特点:当时间小于1秒的时候,一般不使用NSTimer,因为NSTimer的优先级比较低(不能及时运行,不常用)
[NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
2>CADisplayLink
特点:
优先级较高,比较常用:每次刷新屏幕都会调用,每秒调用60次
CADisplayLink *link=[CADisplayLink displayLinkWithTarget:self selector:@selector(timeChange)];
//将link加载到主运行循环
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
12.矩阵变化
-(void)drawRect:(CGRect)rect
{
//1.获取上下文
CGContextRef ctx=UIGraphicsGetCurrentContext();
//2.拼接路径(椭圆)
UIBezierPath *path=[UIBezierPath bezierPathWithOvalInRect:CGRectMake(-50,
-100, 100, 200)];
//===================================================
//上下文矩阵变换:必须在添加路径之前进行矩阵变换
//平移
CGContextTranslateCTM(ctx, 100, 100);
//缩放
CGContextScaleCTM(ctx, 0.5, 0.5);
//旋转
CGContextRotateCTM(ctx, M_PI_4);
//===================================================
//3.添加路径到上下文
CGContextAddPath(ctx, path.CGPath);
//背景颜色
[[UIColor redColor] set];
//4.渲染上下文
CGContextFillPath(ctx);
}
相关文章推荐
- ios-day14-01(使用Quartz 2D绘制基本图形——线、三角形、矩形、圆、圆弧、扇形、文字、图片等)
- Quartz2d (画线 矩形 圆 三角形 弧线 扇形 进度圈等)
- iOS开发UI-利用Quartz2D 实现基本绘图(画三角形、矩形、圆、圆弧)
- iOS Quartz 2D 绘制图形(线段\三角形\矩形\圆\圆弧等)
- iOS开发UI-利用Quartz2D 实现基本绘图(画三角形、矩形、圆、圆弧)
- iOS开发UI篇—Quartz2D简单图形绘制(二)直线,三角形,矩形,扇形,弧,圆
- Quartz 2d 用CGContextRef 绘制各种图形 (文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角形、贝塞尔曲线、图片)
- Quartz2d 使用UIkit绘图方法 CADisplayLink 定时器
- Quartz 2D绘画直线,四边形,三角形,圆,圆弧的基本方法【原创】
- 关于ActiveReport使用ActivexViewer输出时,客户端不会提示下载控件的问题.
- iOS开发中使用Quartz2D绘图及自定义UIImageView控件
- 猫猫学IOS(二十九)UI之Quartz2D自定义下载控件_画各种图形
- iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
- Quartz 2D绘画直线,四边形,三角形,圆,圆弧的基本方法
- C# 模仿QQ、MSN消息提示系列 五、改进 只使用两个时间控件
- iOS开发之Quartz2D 二:绘制直线,曲线,圆弧,矩形,椭圆,圆
- AJ学IOS(29)UI之Quartz2D自定义下载控件_画各种图形
- iOS--Quartz2D使用(自定义UIImageView控件、绘制基本图形)
- C# 模仿QQ、MSN消息提示系列 五、改进 只使用两个时间控件
- iOS:quartz2D绘图(画一些简单的图形,如直线、三角形、圆、矩形、文字等)