Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统
Quartz 2D能完成的工作
iOS中,大部分控件都是Quartz2D绘制出来的
View内部有个layer
(图层)属性,drawRect:
方法中取得的是一个Layer Graphics Context
,因此,绘制的东西其实是绘制到view
的layer
上去了
这个方法主要是画一条线 但是必须指定起点
//移动画笔位置
CGPathMoveToPoint(path, &transform, 100, 50);
CGPathAddLineToPoint(path, &transform, 100, 100);
上面&transform
其实就是指定参照点坐标,为空时相当于(0,0)
第一行是指定线的起点 为(100,50)
第二行就是向(100,100)画线
这个方法是画一条弧线
CGPathAddArc(path, &transform, x1, y1, r, CGFloat(M_PI), 2*CGFloat(M_PI), false);
就是以&transform
为参照点 以(x1,y1)
为中心点 r
为半径 从PI
到2PI
顺时针(false
) 画半圆
这个是画一条线附带弧线 这个方法相比前两个理解起来稍难
可以看这个解释
CGPathMoveToPoint(path, &transform, x1, y1);
CGPathAddArcToPoint(path, &transform, x2, y2, x3, y3, r);
这样理解 起始点为(x1,y1)
终点为(x3,y3)
交叉点为(x2,y2)
画一个半径为r
的半圆
注意声称的线只有起始点到交叉处形成的弧线 不包含弧线到终点
的部分
func test01(){
UIGraphicsBeginImageContext(self.view.bounds.size);
let gc = UIGraphicsGetCurrentContext();
//参照点坐标
var transform = CGAffineTransformMakeTranslation(0,0);
let path = CGPathCreateMutable();
//圆中心点为(100,100) 半径50 起始角度为0 旋转1.5PI 顺时针
//这时候画笔的起始点为(150,100) 画完之后停留在(100,50)
CGPathAddArc(path, &transform, 100, 100, 50, 0, 1.5*CGFloat(M_PI), false);
//从当前点到(100,100)画线
CGPathAddLineToPoint(path, &transform, 100, 100);
//从当前点到(150,100)画线
CGPathAddLineToPoint(path, &transform, 150, 100);
//移动画笔位置
CGPathMoveToPoint(path, &transform, 100, 50);
CGContextAddPath(gc, path);
UIColor.grayColor().setFill();
UIColor.orangeColor().setStroke();
CGContextSetLineWidth(gc, 1);
CGContextDrawPath(gc, CGPathDrawingMode.FillStroke);
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
let imageView = UIImageView(image: image);
self.view.addSubview(imageView);
}
func test02(){
UIGraphicsBeginImageContext(self.view.bounds.size);
let gc = UIGraphicsGetCurrentContext();
//参照点坐标
var transform = CGAffineTransformMakeTranslation(50,100);
let path = CGPathCreateMutable();
//初始点为(0, 0)
CGPathMoveToPoint(path, &transform, 0, 0);
//这样理解 起始点为(0,0) 终点为(100,0)交叉点为(50,200) 画一个半径为10的半圆
CGPathAddArcToPoint(path, &transform, 50, 200, 100, 0, 10);
//CGPathAddArcToPoint会在交点中停止,所以需要再次调用CGPathAddLineToPoint画出下面的线
CGPathAddLineToPoint(path, &transform, 100, 0);
CGContextAddPath(gc, path);
UIColor.grayColor().setFill();
UIColor.orangeColor().setStroke();
CGContextSetLineWidth(gc, 1);
CGContextDrawPath(gc, CGPathDrawingMode.FillStroke);
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
let imageView = UIImageView(image: image);
self.view.addSubview(imageView);
}