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
// 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
- Quartz 2D 详细解说
- Quartz 2D 绘图d
- Quartz 2d资料
- Quartz 2D 基础
- Quartz - 2D学习
- Quartz 2D (-)
- IOS Quartz 2D
- Quartz 2D 学习
- Quartz 2D 裁剪
- Quartz 2D - 绘线
- Quartz 2D 裁剪
- quartz 2D
- Quartz 2D
- Quartz 2D
- Quartz 2D
- quartz 2D 大纲
- quartz 2D 总结
- Quartz 2D绘图
- java-jvm电子书合集
- portal 的基础设施
- R语言常用包分类
- Spring集成JMS
- Maven权威指南-电子书合集
- Quartz 2D 详细解说
- ubuntu root默认密码(初始密码)
- Android与与服务器交换数据、上传、下载、读取文件
- MySQL and MariaDB 电子书合集
- 巧用PyUnit中unittest特性解决接口测试产生脏数据问题
- 渣渣ACM日记——1131-买水果(NYOJ)
- MFC 子窗口全屏显示扩展控件
- java反射详解
- DJango views用法