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大家都不会感 ...
随机推荐
- BZOJ 1010 玩具装箱toy(斜率优化DP)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1010 题目大意:P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他 ...
- 小程序的一个tab切换
<view class="tab-left" bindtap="tab"> <view class="{{tabArr.curHdI ...
- 转载--MyBaits中的#和$的区别
面试被问到了,百度了下,原文地址:mybatis中的#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111, ...
- redis之(九)redis的事务机制
[一]什么是redis的事务 --->redis的事务是一组命令的集合. --->redis的事务是保证一组命令,要么都执行,要么都不执行.但不支持一组命令中,其中一个或多个执行失败,不支 ...
- Multiply Strings——面试题
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- 【Mac电脑】Jenkins的安装
1.JDK自己下载安装喽, 2.下载Jenkins 下载路径:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.121.1/jenki ...
- Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库
为什么要这样做? 默认情况下,Redis 服务会提供 16 个数据库,Laravel 使用数据库 0 (请见 Redis 文档)作为缓存和 Session 的存储. 在使用的过程中觉得这个默认的设置挺 ...
- The 18th Zhejiang University Programming Contest Sponsored by TuSimple -C Mergeable Stack
题目链接 题意: 题意简单,就是一个简单的数据结构,对栈的模拟操作,可用链表实现,也可以用C++的模板类来实现,但是要注意不能用cin cout,卡时间!!! 代码: #include <std ...
- PowerShell 获取系统的硬件信息
1.获取系统的BIOS的信息: Get-WMIObject -Class Win32_BIOS 2.获取内存信息: Get-WMIObject -Class Win32_PhysicalMemory ...
- 主元素 II
主元素 II 给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一. 样例 给出数组[1,2,1,2,1,3,3] 返回 1 注意 数组中只有唯一的主元素 挑战 要求时间复 ...