iOS开发之Quartz2D的介绍与使用详解

2020-01-18 22:02:02王冬梅

(2)使用不含有“Create”或“Copy”的函数获取的对象,则不需要释放

(3)如果retain了一个对象,不再使用时,需要将其release掉。

(4)可以使用Quartz 2D的函数来指定retain和release一个对象。例如,如果创建了一个CGColorSpace对象,则使用函数CGColorSpaceRetain和CGColorSpaceRelease来retain和release对象。

(5)也可以使用Core Foundation的CFRetain和CFRelease。注意不能传递NULL值给这些函数。

六、Quartz2D使用案例

1、画矩形、正方形


- (void)drawRect:(CGRect)rect {
 
 //1.获取上下文
 CGContextRef ctx = UIGraphicsGetCurrentContext();
 //2.描述路径
 UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(50, 50, 200, 200)];
 //3.把路径添加到上下文
 CGContextAddPath(ctx, path.CGPath);
 
 [[UIColor redColor] set];// 路径的颜色
 
 //4.把上下文的内容渲染到View的layer.
 //CGContextStrokePath(ctx);// 描边路径
 CGContextFillPath(ctx);// 填充路径
 
}

运行效果:

ios,quartz2d,详解,quartz2d教程

2、画扇形

除上面“二、使用Quartz2D自定义View”中的方法外,也可以使用OC中自带画图方法实现,如下:


- (void)drawRect:(CGRect)rect {
 
 CGPoint center = CGPointMake(rect.size.width * 0.5, rect.size.height * 0.5);
 CGFloat radius = rect.size.width * 0.5 - 10;
 CGFloat startA = 0;
 CGFloat endA = -M_PI_2;
 // 画弧的路径
 UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:NO];
 // 添加一根线到圆心
 [path addLineToPoint:center];
 // 闭合路径
 [path closePath];
 // 路径颜色
 [[UIColor redColor] set];
 // 填充路径
 [path fill];
 // 描边路径
 //[path stroke];
 
}

运行效果:

ios,quartz2d,详解,quartz2d教程

注:

判断一个点是否在一个矩形框内


CGRectContainsPoint(rect,point);//判断point这个点是否在rect这个矩形框内

3、画圆形


- (void)drawRect:(CGRect)rect {
 
 //1.获取上下文
 CGContextRef ctx = UIGraphicsGetCurrentContext();
 //2.描述路径
 // cornerRadius:圆角半径。矩形的宽高都为200,如果圆角为100,那么两个角之间弧线上任意一点到矩形中心的距离都为100,所以为圆形
 UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(50, 50, 200, 200) cornerRadius:100];
 //3.把路径添加到上下文
 CGContextAddPath(ctx, path.CGPath);
 
 [[UIColor redColor] set];// 路径的颜色
 
 //4.把上下文的内容渲染到View的layer.
 // CGContextStrokePath(ctx);// 描边路径
 CGContextFillPath(ctx);// 填充路径
 
}