iOS:quartz2D绘图(画一些简单的图形,如直线、三角形、圆、矩形、文字等)
前一篇几乎已经详细介绍了Quartz2D的所有知识,这一篇以及后面就不废话了,主要是用具体的实例来演示绘图效果。
这里我们先来绘制一些简单的图形(如直线、三角形、圆、矩形、文字、图像),它有两种方式可以绘制,一种是通过上下文绘制,另一种是通过路径绘制。下面对绘制三角形做了一个两种方式绘制的演示。
绘制基本的图形,如果自定义一个视图类,那么需要在操作的视图类中重写- (void)drawRect:(CGRect)rect方法,并在在该方法中绘制图形,该画图方法无需手动调用,是系统自动调用的。这里,我采用自定义一个视图类并将控制器的视图关联此自定义类的方式来绘制图形。具体实例如下:
1.创建一个自定义的视图类DemoView,关联控制器视图。
2.在自定义的视图类的- (void)drawRect:(CGRect)rect方法中进行绘图:
//所有的调用方法都写在- (void)drawRect:(CGRect)rect
- (void)drawRect:(CGRect)rect
{
//1.获取绘图的上下文
CGContextRef context = UIGraphicsGetCurrentContext(); //画直线
[self drawLine:context]; //画三角形
[self drawTriangle:context]; //画矩形
[self drawRectangle:context]; //画圆
[self drawCircle:context]; //路径的使用
[self drawByPath:context]; //画文字
[self drawString:context]; //画图像
[self drawImage]; }
//绘制直线
#pragma mark -画直线(实线和虚线)
-(void)drawLine:(CGContextRef) context
{
//2.添加绘图路径
CGContextMoveToPoint(context, , );
CGContextAddLineToPoint(context, , ); //终点 //3.设置绘图的属性
//描边的颜色
CGFloat redColor[] = {1.0,0.0,0.0,1.0};
CGContextSetStrokeColor(context, redColor); //填充的颜色
CGFloat greenColor[] = {0.0,1.0,0.0,1.0};
CGContextSetFillColor(context, greenColor); //线宽
CGContextSetLineWidth(context, ); //线的类型(虚线)
//CGFloat dash[2] = {1.0,2.0};
//CGContextSetLineDash(context, 0,dash, 2); //4.绘图(设置既填充有描边)
CGContextDrawPath(context, kCGPathFillStroke);
}
所画直线和虚线截图为:
//绘制三角形
#pragma mark -直接在上下文画三角形(第一种方式)
-(void)drawTriangle:(CGContextRef) context
{
//2.添加绘图路径
CGContextMoveToPoint(context, , );//起始点
CGContextAddLineToPoint(context, , ); //终点
CGContextAddLineToPoint(context, , ); //终点
CGContextAddLineToPoint(context, , ); //终点 //3.设置绘图的属性
//描边的颜色
CGFloat redColor[] = {1.0,0.0,0.0,1.0};
CGContextSetStrokeColor(context, redColor); //填充的颜色
CGFloat greenColor[] = {0.0,1.0,0.0,1.0};
CGContextSetFillColor(context, greenColor); //线宽
CGContextSetLineWidth(context, ); //线的连接点的类型(miter尖角、round圆角、bevel平角)
CGContextSetLineJoin(context, kCGLineJoinRound); //4.绘图(设置既填充有描边)
CGContextDrawPath(context, kCGPathFillStroke); }
所画的三角形截图为:
//绘制矩形
#pragma mark -画矩形
-(void)drawRectangle:(CGContextRef)context
{
//添加矩形
CGContextAddRect(context, CGRectMake(, , , )); //设置绘图的属性
//描边的颜色
CGFloat redColor[] = {1.0,0.0,0.0,1.0};
CGContextSetStrokeColor(context, redColor); //填充的颜色
CGFloat greenColor[] = {0.0,1.0,0.0,1.0};
CGContextSetFillColor(context, greenColor); //4.绘图
CGContextDrawPath(context, kCGPathFillStroke);
}
所画的矩形截图为:
//绘制圆
#pragma mark -画圆(正圆、椭圆)
-(void)drawCircle:(CGContextRef) context
{
//圆
CGContextAddEllipseInRect(context, CGRectMake(, , , )); //椭圆
CGContextAddEllipseInRect(context, CGRectMake(, , , )); //设置绘图的属性
//描边的颜色
CGFloat redColor[] = {1.0,0.0,0.0,1.0};
CGContextSetStrokeColor(context, redColor); //填充的颜色
CGFloat greenColor[] = {0.0,1.0,0.0,1.0};
CGContextSetFillColor(context, greenColor); //4.绘图
CGContextDrawPath(context, kCGPathFillStroke);
}
所画的正圆和椭圆截图为:
通过路径画三角形(第二种画图方式)
#pragma mark -先把路径添加到上下文,然后通过路径画三角形
-(void)drawByPath:(CGContextRef)context
{
//创建路径
CGMutablePathRef path = CGPathCreateMutable(); //往路径中添加图像
CGPathMoveToPoint(path, NULL, , );
CGPathAddLineToPoint(path, NULL, , );
CGPathAddLineToPoint(path, NULL, , ); //设置绘图的属性
[[UIColor redColor]setStroke];//描边
[[UIColor greenColor]setFill];//填充
//[[UIColor purpleColor]set]; //既描边又填充 //将路径添加到上下文中
CGContextAddPath(context, path); //闭合路径
CGContextClosePath(context); //绘图
CGContextDrawPath(context, kCGPathFillStroke); //清理
CGPathRelease(path);
}
所画三角形截图为:
//绘制文字
#pragma mark -画文字(不换行、换行)
-(void)drawString:(CGContextRef)context
{
NSString *str = @"hello world"; //以点开始画不换行
[str drawAtPoint:CGPointMake(, ) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:],NSForegroundColorAttributeName:[UIColor blueColor]}]; //在矩形中画,超出就换行
[str drawWithRect:CGRectMake(, , , ) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:],NSForegroundColorAttributeName:[UIColor blueColor]} context:nil];
}
不换行和换行的文字截图为:
//绘制图像
#pragma mark -画图像(将原图绘制、将原图按照矩形区域大小绘制、带花边绘制)
-(void)drawImage
{
UIImage *imageName = [UIImage imageNamed:@"1.png"]; //原始图像大小
[imageName drawAtPoint:CGPointMake(, )]; //改变图像大小
[imageName drawInRect:CGRectMake(, , , )]; //花纹样式画图像
[imageName drawAsPatternInRect:CGRectMake(, , , )];
}
三种绘制的图像截图为:
iOS:quartz2D绘图(画一些简单的图形,如直线、三角形、圆、矩形、文字等)的更多相关文章
- iOS:quartz2D绘图 (动画)
quartz2D可以用来绘制自己需要的图形,它们绘制出来的是一个静态的图形,那么如何绘制一个动态的图形呢?动态的图形就是动画,所谓动画,其实就是很多张图片在短时间内不停的切换所产生的一种视觉效果.qu ...
- (转载)C# GDI+ 画简单的图形:直线、矩形、扇形等
GDI+是一种绘图装置接口, 当拖动窗体是,窗体发生移动,window默认为从窗体移动到另一个地方,先发生擦除后再重新画一个窗体: 而我们自己动手画的图(如下面的线),不会重新画:在属性中,Paint ...
- [WinAPI] API 1 [桌面上画一个简单彩色图形]
#include<Windows.h> void GdiOut(HDC hdc); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hP ...
- (转)第02节:在Canvas上画简单的图形
我们现在已经可以在HTML中使用Fabric.js库了,那这节我们就详细的学习一下如何在canvas上画出简单的图形. 在画东西之前我们需要了解画任何东西的基本三个步骤: 声明画布(canvas),用 ...
- 【iOS】Quartz2D绘图路径Path
一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径 cgmutablepathref 调用该方法相当于创建了一个路径,这个路径用 ...
- iOS:quartz2D绘图
Quartz-2D:绘图 一.介绍: •Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境 •Quartz 2D API可以实现许多功能,如基于路径的绘图.透明度.阴影 ...
- 阶段性总结⓵触摸事件&手势识别⓶Quartz2D绘图⓷CALayer图层⓸CAAnimation⓹UIDynamic UI动力学⓺KVC&KVO
知识点复习 1. 触摸事件&手势识别 1> 4个触摸事件,针对视图的 2> 6个手势识别(除了用代码添加,也可以用Storyboard添加) 附加在某一个特定视图上的, ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- iOSQuart2D绘图之UIImage简单使用
代码地址如下:http://www.demodashi.com/demo/11609.html 人生得意须尽欢,莫使金樽空对月. 天生我材必有用,千金散尽还复来. 前记 说到UIImage大家都不会感 ...
随机推荐
- 基于rest_framework和redis实现购物车的操作,结算,支付
前奏: 首先,要在主机中安装redis,windows中安装,下载一个镜像,直接进行下一步的安装,安装成功后,在cmd中输入redis-cli 安装python的依赖库: redis 和 ...
- hdu 2444(染色法判断二分图+最大匹配)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- Loadrunner脚本读取 XMl 文件
Loadrunner脚本读取 XMl 文件 性能测试工程师要懂代码么?答案是必须的,好多测试员认为在 loadrunner 中编写脚本很难很牛 X . 好多人认为 loadrunner 只支持 C 语 ...
- Jenkins+maven+Tomcat配置发布
jenkins大多数情况下都是用来部署Java项目,Java项目有一个特点是需要编译和打包的,一般情况下编译和打包都是用maven完成,所以系统环境中需要安装maven. 实验环境: 10.0.0.1 ...
- 日志 log4net
先引入log4net 接着配置configuration文件 <?xml version="1.0"?><configuration> <system ...
- HDU3487 Play With Chain [Splay]
题目传送门 题目描述 Problem Description YaoYao is fond of playing his chains. He has a chain containing n dia ...
- 性能测试篇:LoadRunner11 压力测试实例笔记
最近在学习用loadrunner做web性能测试,简单记录一下一个自学实例流程. 1.录制测试脚本 (1).打开LR11,点击create/edit Script来打开VUgen (2).点击新建 ( ...
- 10 个常用的 es6 特性
1. const and let 除了函数作用域之外,增加了块级作用域和常量.const 定义的绑定不可以修改,let定义的绑定在{ }不能访问.之前的 var 如果不在函数作用域内,相当于定义了一 ...
- ansible用playbook实现定期监控各机器磁盘和进程状态
目标:用ansible定期监控各机器的磁盘空间状况 和进程运行状况 1)配置playbook脚本,实现对磁盘空间 和 特定进程运行状态的每日检查: 2)通过邮件插件,把检测结果发到ops邮箱: 一.p ...
- Luogu P4093 [HEOI2016/TJOI2016]序列 dp套CDQ
题面 好久没写博客了..最近新学了CDQ...于是就来发一发一道CDQ的练习题 看上去就是可以dp的样子. 设\(dp_{i}\)为以i结尾的最长不下降序列. 易得:\(dp_{i}\)=\(max( ...