Quartz 2D基本图形的绘制
基本步骤:
1.获取绘图上下文
2.创建并设置路径
3.将路径添加到上下文
4.设置上下文状态
5.绘制路径
6.释放路径
#import "YGView.h"
//屏幕尺寸
#define kScreenSize [UIScreen mainScreen].bounds.size
//屏幕宽高定义
#define kscreenWidth [[UIScreen mainScreen] bounds].size.width
#define kScreenHeight [[UIScreen mainScreen] bounds].size.height
@implementation YGView
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
CGContextRef context=UIGraphicsGetCurrentContext();
// [self drawLine1:context];
// [self drawLine2:context];
// [self drawArc:context];
// [self drawCurve:context];
// [self drawImage:context];
// [self drawImageChangeContext:context];
[self drawImage1:context];
}
-(void)drawLine1:(CGContextRef)context{
CGMutablePathRef path=CGPathCreateMutable();
CGPathMoveToPoint(path, nil, 20, 50);//移动到指定位置(设置路径起点)
CGPathAddLineToPoint(path, nil, 20, 100);//绘制直线(从起始位置开始)
CGPathAddLineToPoint(path, nil, 200, 100);//绘制另一条直线(从上一条直线的终点开始)
CGContextAddPath(context, path);
CGContextSetRGBStrokeColor(context, 1.0, 0, 0, 1);//设置直线颜色
CGContextSetRGBFillColor(context, 0, 1.0, 0, 1);//设置填充颜色
CGContextSetLineWidth(context, 2.0);//设置直线宽度
CGContextSetLineCap(context, kCGLineCapRound);//设置顶点样式
CGContextSetLineJoin(context, kCGLineJoinRound);//设置连接点样式
CGFloat lengths[2]={18,9};
CGContextSetLineDash(context, 0, lengths, 2);
CGContextDrawPath(context, kCGPathFillStroke);//最后一个参数是填充类型
/*CGPathDrawingMode是填充方式,枚举类型
kCGPathFill:只有填充(非零缠绕数填充),不绘制边框
kCGPathEOFill:奇偶规则填充(多条路径交叉时,奇数交叉填充,偶交叉不填充)
kCGPathStroke:只有边框
kCGPathFillStroke:既有边框又有填充
kCGPathEOFillStroke:奇偶填充并绘制边框
*/
CGPathRelease(path);
}
-(void)drawLine2:(CGContextRef)context{
CGContextMoveToPoint(context, 20, 150);
CGContextAddLineToPoint(context, 20, 200);
CGContextAddLineToPoint(context, 200, 200);
//封闭路径
CGContextClosePath(context);
[[UIColor redColor] setStroke];//设置红色边框
[[UIColor greenColor] setFill];//设置填充颜色
//[[UIColor blueColor]set];//同时设置填充和边框色
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark 绘制矩形
-(void)drawRectWithContext:(CGContextRef)context{
//添加矩形对象
CGRect rect=CGRectMake(20, 50, 280.0, 50.0);
CGContextAddRect(context,rect);
//设置属性
[[UIColor blueColor]set];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark - 绘制椭圆
-(void)drawEllipse:(CGContextRef)context{
CGRect rect=CGRectMake(50, 50, 220, 200);
CGContextAddEllipseInRect(context, rect);
//设置属性
[[UIColor greenColor] set];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark - 绘制弧线
-(void)drawArc:(CGContextRef)context{
// CGContextAddArc(CGContextRef _Nullable c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)
/* 添加弧线对象
x:中心点x坐标
y:中心点y坐标
radius:半径
startAngle:起始弧度
endAngle:终止弧度
clockwise:是否逆时针绘制,0为顺时针绘制
*/
CGContextAddArc(context, 160, 160, 100, 0, M_PI*0.2, 0);
//设置属性
[[UIColor redColor] setStroke];
[[UIColor yellowColor] setFill];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark - 绘制贝塞尔曲线
-(void)drawCurve:(CGContextRef)context{
CGContextMoveToPoint(context, 20, 100);
// CGContextAddQuadCurveToPoint(CGContextRef _Nullable c, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y)
/*绘制二次贝塞尔曲线
c:图形上下文
cpx:控制点x坐标
cpy:控制点y坐标
x:结束点x坐标
y:结束点y坐标
*/
CGContextAddQuadCurveToPoint(context, 160, 0, 300, 100);
CGContextMoveToPoint(context, 20, 500);
// CGContextAddCurveToPoint(CGContextRef _Nullable c, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y)
/*绘制三次贝塞尔曲线
c:图形上下文
cp1x:第一个控制点x坐标
cp1y:第一个控制点y坐标
cp2x:第二个控制点x坐标
cp2y:第二个控制点y坐标
x:结束点x坐标
y:结束点y坐标
*/
CGContextAddCurveToPoint(context, 80, 300, 240, 500, 300, 300);
//设置图形上下文属性
[[UIColor yellowColor]setFill];
[[UIColor redColor]setStroke];
//绘制路径
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark - 图像绘制
-(void)drawImage:(CGContextRef)context{
UIImage *image=[UIImage imageNamed:@"test1"];
//从某一点开始绘制
// [image drawAtPoint:CGPointMake(10, 50)];
//绘制到指定的矩形中,注意如果大小不合适会会进行拉伸
[image drawInRect:CGRectMake(20, 20, 300, 300)];
//平铺绘制
// [image drawAsPatternInRect:CGRectMake(20, 20, 300, 300)];
}
#pragma mark - 图形上下文变换
-(void)drawImageChangeContext:(CGContextRef)context{
//保存初始状态
CGContextSaveGState(context);
//1.图形上下文向右平移40
CGContextTranslateCTM(context, 60, 40);
//2.缩放0.5
CGContextScaleCTM(context, 0.5, 0.5);
//3.旋转
CGContextRotateCTM(context, M_PI_4/4);
UIImage *image=[UIImage imageNamed:@"test1"];
[image drawInRect:CGRectMake(20, 50, 300, 300)];
//恢复到初始化状态
CGContextRestoreGState(context);
}
#pragma mark - 使用Core Graphics绘制图像
-(void)drawImage1:(CGContextRef)context{
// UIImage *image=[UIImage imageNamed:@"test1"];
// //图像绘制
// CGRect rect=CGRectMake(20, 50, 300, 300);
// CGContextDrawImage(context, rect, image.CGImage);
// ///以上代码图像会倒过来
UIImage *image=[UIImage imageNamed:@"test1"];
CGContextSaveGState(context);
CGFloat height=300,y=50;
//上下文形变
CGContextScaleCTM(context, 1, -1);//在Y轴缩放-1相当于沿着X轴旋转180度;注意不要沿着z轴旋转,这样得不到想要的结果
CGContextTranslateCTM(context, 0, -(kScreenHeight-(kScreenHeight-height-2*y)));//向上平移
//图像绘制
CGRect rect=CGRectMake(10, y, 300, height);
CGContextDrawImage(context, rect, image.CGImage);
CGContextRestoreGState(context);
}
@end
Quartz 2D基本图形的绘制相关推荐
- 用Quartz 2d勾画图形
用Quartz 2d勾画图形可能大家都会,但是如何让我们勾画的图形响应事件呢?有人会说用坐标计算啊,但是有时候对不规则的图形,这个办法不使最简单的做法,下面的代码可以帮你很容易实现这一点. - (vo ...
- Quartz 2D Programming Guide笔记
###Graphics Contexts图形上下文### 图形上下文(graphics context)是绘制目标,可以理解为画布,包含着绘图时的参数和设备信息.类型为CGContextRef.获取g ...
- 绘图与滤镜全面解析--Quartz 2D 、Core Image
绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2 ...
- MATLAB笔记之复数以及基本复数函数二维视角(2d)图形绘制
MATLAB笔记之复数以及基本复数函数二维视角(2d)图形绘制 QQ:3020889729 小蔡 一般复数的2d图形绘制 一般复数的平移图形~(即一个复数加另一个复数实现在复平面的平移) 补充几个复数 ...
- YDOOK: ANSYS Electronic Desktop Maxwell 19 教程2:绘制基本2D图形对象 绘制直线段
使用 ANSYS Electronic Desktop Maxwell 19 绘制基本2D图形对象 绘制直线段 主面板滑动选择 将滚轮放在主面板的右侧进行滑动的时候,主面板的内容将会发生改变. 1. ...
- Quartz 2d绘图
今天看了一下Quartz 2D绘图,我只想说:不要把绘图和动画那些东西当做一个很复杂的东西,其实只要你认真看还是可以理解的.他们并不难.啰嗦了几句,现在直接进入正题: 前提是我们必须新建一个singl ...
- iOS开发之Quartz 2D绘图
2019独角兽企业重金招聘Python工程师标准>>> Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境 Quartz 2D API可以实现许多功能,如 ...
- quartz c语言,IOS学习之—— Quartz 2D (C语言的框架)
//************************************************************************************************** ...
- Quartz 2D绘图简介
Quartz 2D绘图 简介 Quartz 2D是2D绘图引擎,适用iOS和Mac OS X程序.它提供底层轻量级的接口,并且会根据输出显示设备提供不匹配的逼真的画面 .Quartz 2D是与分辨率 ...
最新文章
- Hyperledger Composer评测
- 数据中台实战(六):交易分析
- 查看docker的端口映射情况
- centos 6.5安装mysql5.7,centos6.5安装mysql5.7
- Java并发编程—定时器Timer底层原理
- Kali获取不到IP解决方案
- css餐厅_餐厅的评分预测
- 我的博客开张了!!!
- sqlite 设置向下递增
- 【BZOJ1037】【codevs1410】生日聚会,DP
- 全网抢夺“刘畊宏女孩”
- 边缘计算(edge computing)中computation offloading、resource allocation、resource provisioning的区别
- Nginx 配置文件详细说明
- 大数据的可视化:bigvis包的简单尝试
- MySQL 第五次练习(MySQL备份恢复)
- 数据--第50课 - 基础查找课后练习
- ckeditor+ckfinder使用
- 小米路由器 R1D 可用 java JRE openjdk
- 李开复创办创新工场的发言稿及访谈
- 如果你35岁恐慌了,那你真的该反思自己了···