@chenbinghua
2015-09-14T22:03:36.000000Z
字数 1455
阅读 1294
iOS笔记
阅读参考:Quartz2D介绍
Quartz 2D是一个二维绘图
引擎,同时支持iOS和Mac系统
Quartz2D最重要的作用是:自定义控件!自定义控件!自定义控件!重要的事情说三遍。
事实上iOS中大部分控件的内容都是通过Quartz2D画出来的
首先,得有图形上下文,因为它能保存绘图信息,并且决定着绘制到什么地方去
其次,那个图形上下文必须跟view相关联,才能将内容绘制到view上面
自定义view的步骤
View内部有个layer(图层)属性,drawRect:方法中取得的是一个Layer Graphics Context,因此,绘制的东西其实是绘制到view的layer上去了。
View之所以能显示东西,完全是因为它内部的layer。
新建CBHView类,继承UIView
重写- (void)drawRect:(CGRect)rect方法
- (void)drawRect:(CGRect)rect {
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.描述路径
// 2.1设置起点
CGContextMoveToPoint(ctx, 50, 50);
// 2.2添加线段
CGContextAddLineToPoint(ctx, 100, 100);
// 3.渲染上下文
CGContextStrokePath(ctx);
// CGContextFillPath(ctx); 填充线段包围的区域
}
UIKit框架已经封装了一些绘图功能
- (void)drawRect:(CGRect)rect {
// 创建贝瑟尔路线,底层获取drawRect:方法内的Layer Graphics Context图形上下文
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(50, 50)];
[path addLineToPoint:CGPointMake(200, 200)];
// 线宽
path.lineWidth = 10;
// 颜色
[[UIColor redColor] set];
// 渲染上下文
[path stroke];
}
新建一个起点
void CGContextMoveToPoint(CGContextRef c, CGFloat x, CGFloat y)
添加新的线段到某个点
void CGContextAddLineToPoint(CGContextRef c, CGFloat x, CGFloat y)
添加一个矩形
void CGContextAddRect(CGContextRef c, CGRect rect)
添加一个椭圆
void CGContextAddEllipseInRect(CGContextRef context, CGRect rect)
添加一个圆弧
void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y,
CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)