Quartz 2D 详细解说

来源:互联网 发布:路由器主人网络关了 编辑:程序博客网 时间:2024/05/29 04:35


第一次写博客。还是挺用心去写的,关于Quartz 2D 绘图是写的非常的详细


//
// ViewController.m
// 01 Draw
//
// Created by lixi on 15/6/27.
// Copyright (c) 2015年 lx. All rights reserved.
//

#import "ViewController.h"
#import "DrawView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

DrawView *drawView = [[DrawView alloc] initWithFrame:self.view.bounds];
drawView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:drawView];
}

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end


//
// DrawView.m
// 01 Draw
//
// Created by lixi on 15/6/27.
// Copyright (c) 2015年 lx. All rights reserved.
//

#import "DrawView.h"

@implementation DrawView

/*
1.获取上下文
2.设置路径(画的图形)
3.向上下文件中添加路径
4.设置上下文属性(比如画笔的粗细,颜色,阴影,连接点)
5.绘制路径
6.释放路径(某些情况)
 注意:但凡通过Quartz2D中带有creat/copy/retain方法创建出来的值都必须要释放
*/


// 作用:绘制
// 视图第一次显示的时候调用,以及视图需要更新时调用
- (void)drawRect:(CGRect)rect {
// Drawing code
// rect 参数 是self(当前视图)的 Bounds
// NSLog(@"rect :%@", NSStringFromCGRect(rect));

// 1.图形上下文 context 画板
// UIGraphicsGetCurrentContext() 需要在 drawRect:方法里调用
CGContextRef context = UIGraphicsGetCurrentContext();

[self drawWord:context];


}

- (void)drawLine1:(CGContextRef)context {
// 2.设置路径
CGMutablePathRef path = CGPathCreateMutable();

// 设置路径点
CGPathMoveToPoint(path, NULL, 0.f, 100.f);
CGPathAddLineToPoint(path, NULL, 300.f, 100.f);
CGPathAddLineToPoint(path, NULL, 300.f, 200.f);

// 3. 向上下文中添加路径
CGContextAddPath(context, path);

// 4.设置上下文的属性
// 线宽
CGContextSetLineWidth(context, 1.f);

/*

设置线条颜色

context 上下文
red 0 - 1
green 0 - 1
blue 0 - 1
alpha 0 - 1 透明度

*/
CGContextSetRGBStrokeColor(context, 0.f, 1.f, 0.f, 1.f);

// 设置填充色
CGContextSetRGBFillColor(context, 1.f, 0.f, 0.f, 1.f);

// 5.绘制
/*
CGPathDrawingMode // 路径绘制模式
kCGPathFill // 填充
kCGPathStroke // 线条
kCGPathFillStroke // 线和填充
*/
CGContextDrawPath(context, kCGPathFillStroke);

// 6.释放路径 (可选)
CGPathRelease(path);
}

- (void)drawLine2:(CGContextRef)context {
// 2.设置路径
CGMutablePathRef path = CGPathCreateMutable();

CGPathMoveToPoint(path, NULL, 0.f, 100.f);
CGPathAddLineToPoint(path, NULL, 300.f, 100.f);
CGPathAddLineToPoint(path, NULL, 300.f, 200.f);

// 3.向上下文中添加路径
CGContextAddPath(context, path);

// 线宽
CGContextSetLineWidth(context, 10.f);

// 设置线条颜色
CGContextSetRGBStrokeColor(context, 1.f, 0.f, 0.f, 1.f);

// 设置端点
CGContextSetLineCap(context, kCGLineCapRound);

// CGFloat lengths[] = {30, 10}; // 小线段的长度 , 间隙长度
/*
设置虚线

CGContextRef c 上下文
CGFloat phase 相位
const CGFloat *lengths c数组
size_t count 数组元素个数

*/
// CGContextSetLineDash(context, 0.f, lengths , 2);

// 设置连接点的属性
CGContextSetLineJoin(context, kCGLineJoinRound);

// 向上下文中添加路径
CGContextAddPath(context, path);

// 绘制
CGContextDrawPath(context, kCGPathStroke);

}

- (void)drawLine3:(CGContextRef)context {
// 设置路径
CGMutablePathRef path = CGPathCreateMutable();

CGPathMoveToPoint(path, NULL, 0.f, 100.f);
CGPathAddLineToPoint(path, NULL, 300.f, 100.f);
CGPathAddLineToPoint(path, NULL, 300.f, 200.f);

// 向上下文中添加路径
CGContextAddPath(context, path);

// 线宽
CGContextSetLineWidth(context, 20.f);

// 设置线条颜色
CGContextSetRGBStrokeColor(context, 1.f, 0.f, 0.f, 1.f);

CGContextAddPath(context, path);

// 5.绘制
CGContextDrawPath(context, kCGPathFillStroke);

// 6.释放路径
CGPathRelease(path);

//-------------------------------


// 另外一个path
CGMutablePathRef path1 = CGPathCreateMutable();
CGPathMoveToPoint(path1, NULL, 160.f, 30.f);
CGPathAddLineToPoint(path1, NULL, 160.f, 300.f);
CGContextAddPath(context, path1);

CGContextSetLineWidth(context, 40.f);
CGContextSetRGBStrokeColor(context, 0.f, 0.f, 1.f, 1.f);

// 绘制
CGContextDrawPath(context, kCGPathStroke);

CGPathRelease(path1);

}

// 绘制三角形
- (void)drawTriangle:(CGContextRef)context {

CGMutablePathRef path = CGPathCreateMutable();

CGPathMoveToPoint(path, NULL, 50.f, 50.f);
CGPathAddLineToPoint(path, NULL, 200.f, 200.f);
CGPathAddLineToPoint(path, NULL, 50.f, 200.f);

// 向上下文中添加路径
CGContextAddPath(context, path);

// 将路径封闭起来
CGContextClosePath(context); // 上下文中存在未封闭的路径,将路径闭合起来

// 线宽
CGContextSetLineWidth(context, 10.f);

// 设置线条颜色
// CGContextSetRGBStrokeColor(context, 1.f, 0.f, 0.f, 1.f);

[[UIColor greenColor] setStroke];
[[UIColor purpleColor] setFill];

CGContextAddPath(context, path);

// 绘制
CGContextDrawPath(context, kCGPathFillStroke);

// 释放路径
CGPathRelease(path);

}

- (void)drawRectange:(CGContextRef)context {
// 绘制矩形

CGContextAddRect(context, CGRectMake(60.f, 100.f, 200.f, 200.f));

CGContextSetLineWidth(context, 10.f);

CGFloat lengths[] = {20.f, 5.f};
CGContextSetLineDash(context, 0, lengths, 2);

[[UIColor blueColor] setFill];
CGContextDrawPath(context, kCGPathFillStroke);

}

- (void)drawCircle:(CGContextRef)context {
// 矩形内切
CGContextAddEllipseInRect(context, CGRectMake(60.f, 100.f, 300.f, 200.f));
CGContextDrawPath(context, kCGPathFillStroke);

}

- (void)drawArc:(CGContextRef)context {
/*

CGContextRef c 上下文
x,y 圆心
CGFloat radius 半径
CGFloat startAngle 起始角度 0° 是三点钟方向,顺时针方向正值,逆时针方向负值
CGFloat endAngle 终止角度
int clockwise 时钟方向 0 顺时针, 1 逆时针

*/

CGContextAddArc(context, 160.f, 240.f, 100.f, 0, M_PI_2, 1);
CGContextDrawPath(context, kCGPathStroke);

}

- (void)drawBenzier:(CGContextRef)content {
// CGContextAddQuadCurveToPoint(content, 160.f, 100.f, 300.f, 300.f);
// CGContextDrawPath(content, kCGPathStroke);

// 两个控制点
CGContextAddCurveToPoint(content, 140.f, 100.f, 180.f, 320.f, 300.f, 90.f);
CGContextDrawPath(content, kCGPathStroke);

}

//-------------------------------
- (void)drawImage:(CGContextRef)context {

UIImage *img = [UIImage imageNamed:@"3eceb860dfdb381b001d17ce7f30fe4c.jpeg"];
// [img drawInRect:CGRectMake(60.f, 100.f, 200.f, 200.f)]; // 拉伸压缩
[img drawAsPatternInRect:self.bounds]; // 平铺

}

- (void)drawWord:(CGContextRef)context {

NSString *word = @"hehhe";
// top- left corner
// [word drawAtPoint:CGPointMake(0.f, 20.f) withFont:[UIFont systemFontOfSize:20]];

NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.alignment = NSTextAlignmentLeft; // 对齐方式

NSDictionary *attriButes = @{NSFontAttributeName : [UIFont boldSystemFontOfSize:20],
NSParagraphStyleAttributeName : style,
NSForegroundColorAttributeName: [UIColor redColor]}; // 字体颜色

// [word drawAtPoint:CGPointMake(60.f, 100.f) withAttributes:attriButes];
[word drawInRect:CGRectMake(60.f, 100.f, 300.f, 40.f) withAttributes:attriButes];

}

@end
















0 0
原创粉丝点击