您的位置:首页 > 其它

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐