iOS Core Graphics (学习笔记 )

文章引用:http://www.cnblogs.com/kenshincui/p/3959951.html

Quartz 2D

在iOS中绘图一般分为以下几个步骤:

  1. 获取绘图上下文
  2. 创建并设置路径
  3. 将路径添加到上下文
  4. 设置上下文状态
  5. 绘制路径
  6. 释放路径

基本图像绘制

  1. 在Quartz 2D中凡是使用带有“Create”或者“Copy”关键字方法创建的对象,在使用后一定要使用对应的方法释放(由于这个框架基于C语言编写无法自动释放内存);
  2. 在使用Quartz 2D绘图API中所有以“Ref”结尾对象,在声明时都不必声明为指针类型;
  3. 由于Quartz 2D是Core Graphics的一部分,所以API多数以CG开头
  4. 在使用Quartz 2D绘图API时,凡是“UI”开头的相关绘图函数,都是UIKit对Core Graphics的封装(主要为了简化绘图操作);
获取图形上下文

iOS已经为我们准备一个图形上下文,再UI控件的drawRect:方法中调用UIGraphicsGetCurrentContext()即可以返回一个上下文对象。

- (void)drawRect:(CGRect)rect {
    //1.取得图形上下文对象
    CGContextRef context = UIGraphicsGetCurrentContext();
}
常用的绘图方法
  • 绘制直线
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, nil, 20, 50);
CGPathAddLineToPoint(path, nil, 20, 100);
CGPathAddLineToPoint(path, nil, 300, 100);
CGContextAddPath(context, path);
  • 设置样式
//Core Graphics方式
CGContextSetRGBStrokeColor(context, 1.0, 0, 0, 1.0);//线条颜色
CGContextSetRGBFillColor(context, 0, 1.0, 0, 1.0);//填充颜色
CGContextSetLineWidth(context, 2.0);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineJoin(context, kCGLineJoinRound);
//UIKit封装
[[UIColor redColor]setStroke];//设置红色边框
[[UIColor greenColor]setFill];//设置绿色填充
[[UIColor blueColor]set];//同时设置填充和边框色
  • 绘制虚线
CGFloat length[2] = {18,9};
CGContextSetLineDash(context, 0, length, 2);
  • 设置阴影
CGColorRef color = [UIColor grayColor].CGColor;
CGContextSetShadowWithColor(context, CGSizeMake(2, 2), 0.8, color);
  • 设置矩形
//Core Graphics
CGRect rect=CGRectMake(20, 50, 280.0, 50.0);
CGContextAddRect(context,rect);
//UIKit
CGRect rect= CGRectMake(20, 150, 280.0, 50.0);
CGRect rect2=CGRectMake(20, 250, 280.0, 50.0);
 [[UIColor yellowColor]set];
UIRectFill(rect);//绘制填充
[[UIColor redColor]setStroke];
UIRectFrame(rect2);//绘制边框
  • 绘制椭圆
CGRect rect=CGRectMake(50, 50, 220.0, 200.0);
CGContextAddEllipseInRect(context, rect);
}
  • 绘制扇形
/*添加弧形对象
     x:中心点x坐标
     y:中心点y坐标
     radius:半径
     startAngle:起始弧度
     endAngle:终止弧度
     closewise:是否逆时针绘制,0则顺时针绘制
*/
CGContextAddArc(context, 260, 260, 100.0, 0.0, M_PI_2, 1);
}
  • 贝塞尔曲线略

  • 绘制文字

NSString *str=@"Star Walk is the most beautiful stargazing app you’ve ever seen on a mobile device.";
CGRect rect= CGRectMake(20, 50, 280, 300);
UIFont *font=[UIFont systemFontOfSize:18];//设置字体
UIColor *color=[UIColor redColor];//字体颜色
NSMutableParagraphStyle *style=[[NSMutableParagraphStyle alloc]init];//段落样式
NSTextAlignment align=NSTextAlignmentLeft;//对齐方式
style.alignment=align;
[str drawInRect:rect withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:color,NSParagraphStyleAttributeName:style}];
  • 绘制图片
UIImage *image=[UIImage imageNamed:@"    "];
//从某一点开始绘制
[image drawAtPoint:CGPointMake(10, 50)];
//绘制到指定的矩形中,注意如果大小不合适会会进行拉伸
[image drawInRect:CGRectMake(10, 50, 300, 450)];
//平铺绘制
[image drawAsPatternInRect:CGRectMake(0, 0, 320, 568)];
绘制图像到上下文
/*绘制图像到指定图形上下文
     CGPathDrawingMode是填充方式,枚举类型
     kCGPathFill:只有填充(非零缠绕数填充),不绘制边框
     kCGPathEOFill:奇偶规则填充(多条路径交叉时,奇数交叉填充,偶交叉不填充)
     kCGPathStroke:只有边框
     kCGPathFillStroke:既有边框又有填充
     kCGPathEOFillStroke:奇偶填充并绘制边框
*/
//使用CGContextXXX方法绘制图形时需调用,UIKit方法无需调用
CGContextDrawPath(context, kCGPathFillStroke);
CGPathRelease(path);

你可能感兴趣的:(iOS Core Graphics (学习笔记 ))