第一部分 quartz2D绘图基础简介:CGContextRef
一 quartz2D经常用来绘图,它的核心API是CGContextRef
二 CGContextRef的获取
1. 创建位图时获取我们所需CGContextRef(常称为绘图上下文)
在创建位图时,需要获取CGContextRef,那么程序需要先调用UIGraphicsBeginImageContext()来创建内存中的图片,然后利用该函数获取CGContextRef。具体操作如下:
UIGraphicsBeginImageContext(CGSizeMake(375,568));
CGContextRef ctx=UIGraphicsGetCurrentContext();
2.UIVIew获取当前上下文的方式
重写UIView的drawRect的方法,每当里面的内容有更新时,或者显示时,都会调用这个方法。在调用这个方法之前,系统会自动配置绘图环境,因此,只需要通过下面的方法获取即可
CGContextRef ctx=UIGraphicsGetCurrentContext();
第二部分 绘图相关的函数简介
/**
*绘图上下文的获取
*/
CGContextRef ctx=UIGraphicsGetCurrentContext();
/**
*设置绘制直线时直线的宽度
*/
CGContextSetLineWidth(ctx, 2);
/**
*使用指定的颜色来设置 CGContextRef 的线条的颜色
*/
CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor);
/**
*使用指定的颜色来设置 CGContextRef 的填充颜色
*/
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
/**
*使用灰色来设置CGContextRef 的填充颜色,并且可以设置透明度
*/
CGContextSetGrayFillColor(<#CGContextRef context#>, <#CGFloat gray#>, <#CGFloat alpha#>);
/**
*使用灰色来设置CGContextRef 的线条颜色,并且可以设置透明度
*/
CGContextSetGrayStrokeColor(<#CGContextRef context#>, <#CGFloat gray#>, <#CGFloat alpha#>);
/**
*使用RGB颜色模式来设置CGContextRef 的填充颜色
*/
CGContextSetRGBFillColor(<#CGContextRef context#>, <#CGFloat red#>, <#CGFloat green#>, <#CGFloat blue#>, <#CGFloat alpha#>);
/**
*使用RGB颜色模式来设置CGContextRef 的线条颜色
*/
CGContextSetRGBStrokeColor(<#CGContextRef context#>, <#CGFloat red#>, <#CGFloat green#>, <#CGFloat blue#>, <#CGFloat alpha#>);
/**
*设置阴影在X,Y方向上的偏移,以及模糊度(blur值越大,阴影越模糊),该函数没有设置阴影颜色,默认使用1/3透明黑色
*/
CGContextSetShadow(<#CGContextRef context#>, <#CGSize offset#>, <#CGFloat blur#>)
/**
*设置阴影在X,Y方向上的偏移,模糊度,和阴影的颜色
*/
CGContextSetShadowWithColor(<#CGContextRef context#>, <#CGSize offset#>, <#CGFloat blur#>, <#CGColorRef color#>)
第三部分 代码部分
#import "MyView.h"
@implementation MyView
- (void)drawRect:(CGRect)rect {
[self drawLine];
[self drawRect];
[self drawArc];
[self drawQLine];
}
/**
*绘制一条直线
*/
-(void)drawLine{
//1---获取绘图上下文
CGContextRef ctx=UIGraphicsGetCurrentContext();
//2---使用指定颜色来设置该上下文的线条颜色
CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor);
//3---设置直线宽度
CGContextSetLineWidth(ctx, 3);
//4---设置线条的起点
CGContextMoveToPoint(ctx, 20, 20);
//5---设置终点
CGContextAddLineToPoint(ctx, 220, 20);
//6---开始绘图
CGContextDrawPath(ctx, kCGPathFillStroke);
}
/**
*绘制一个矩形
*/
-(void)drawRect{
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(ctx, [UIColor greenColor].CGColor);
CGContextSetLineWidth(ctx, 3);
CGContextAddRect(ctx, CGRectMake(200, 50, 100, 100));
CGContextDrawPath(ctx, kCGPathFillStroke);
}
/**
*绘制一个圆形
*/
-(void)drawArc
{
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(ctx, [UIColor orangeColor].CGColor);
CGContextSetLineWidth(ctx, 2);
CGContextSetFillColorWithColor(ctx, [UIColor blueColor].CGColor);
CGContextAddArc(ctx, 100, 100, 50, 0, 2*M_PI, 0);
CGContextDrawPath(ctx, kCGPathFillStroke);
}
/**
*绘制一条曲线
*/
-(void)drawQLine{
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(ctx, [UIColor orangeColor].CGColor);
CGContextSetLineWidth(ctx, 3);
CGContextMoveToPoint(ctx, 50, 280);
CGContextAddCurveToPoint(ctx, 100, 100, 150, 150, 200, 180);
CGContextDrawPath(ctx, kCGPathFillStroke);
}
运行结果: