iOS绘图——Quartz 2D使用方法
自定义UIView时,只需要重写drawRect:方法
使用Quartz 2D其实也很简单
首先必须要获取绘图的环境,即获取上下文CGContextRef
然后使用各种API进行绘图就可以了(这里有很多API,只有用得多了才能记住)
接下来通过绘制不同的图形来做详细讲解(具体解释都在注释中)
1、绘制几何图形
- (void)drawRect:(CGRect)rect
{
// 获取绘图上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 设置线宽
CGContextSetLineWidth(ctx, 16);
CGContextSetRGBStrokeColor(ctx, 0 , 1, 0 , 1);
// ----------下面绘制3个线段测试端点形状-----------
// 定义4个点,绘制线段
const CGPoint points1[] = {CGPointMake(10 , 20), CGPointMake(90 , 20)
,CGPointMake(90 , 20) , CGPointMake(20, 50)};// 绘制线段(默认不绘制端点)
CGContextStrokeLineSegments(ctx ,points1 , 4);// 设置线段的端点形状:方形端点
CGContextSetLineCap(ctx, kCGLineCapSquare);
// 定义4个点,绘制线段
const CGPoint points2[] = {CGPointMake(110 , 20), CGPointMake(190 , 20)
,CGPointMake(190 , 20) , CGPointMake(120, 50)};// 绘制线段
CGContextStrokeLineSegments(ctx ,points2 , 4);
// 设置线段的端点形状:圆形端点
CGContextSetLineCap(ctx, kCGLineCapRound);
// 定义4个点,绘制线段
const CGPoint points3[] = {CGPointMake(210 , 20), CGPointMake(300 , 20)
,CGPointMake(300 , 20) , CGPointMake(220, 50)};// 绘制线段
CGContextStrokeLineSegments(ctx ,points3 , 4);
// ----------下面绘制3个线段测试点线模式-----------
// 设置线段的端点形状
CGContextSetLineCap(ctx, kCGLineCapButt);
// 设置线宽
CGContextSetLineWidth(ctx, 10);
CGFloat patterns1[] = {6 , 10};
// 设置点线模式:实线宽6,间距宽10
CGContextSetLineDash(ctx , 0 , patterns1 , 1);
// 定义2个点,绘制线段
const CGPoint points4[] = {CGPointMake(40 , 65), CGPointMake(280 , 65)};
// 绘制线段
CGContextStrokeLineSegments(ctx ,points4 , 2);
// 设置点线模式:实线宽6,间距宽10,但第一个实线宽为3
CGContextSetLineDash(ctx , 3 , patterns1 , 1);
// 定义2个点,绘制线段
const CGPoint points5[] = {CGPointMake(40 , 85), CGPointMake(280 , 85)};
// 绘制线段
CGContextStrokeLineSegments(ctx ,points5 , 2);
CGFloat patterns2[] = {5,1,4};//代表长为5的实线、距离为3的间距、长为4的实线、距离为5的间距.....这种点线模式
// 设置点线模式
CGContextSetLineDash(ctx , 0 , patterns2 , 3);
const CGPoint points6[] = {CGPointMake(40 , 105), CGPointMake(280 , 105)};
// 绘制线段
CGContextStrokeLineSegments(ctx ,points6 , 2);
// ---------下面填充矩形---------
// 设置线条颜色
CGContextSetStrokeColorWithColor(ctx, [UIColor blueColor].CGColor);
// 设置线条宽度
CGContextSetLineWidth(ctx, 14);
// 设置填充颜色
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
// 填充一个矩形
CGContextFillRect(ctx , CGRectMake(30 , 120 , 120 , 60));
// 设置填充颜色
CGContextSetFillColorWithColor(ctx, [UIColor yellowColor].CGColor);
// 填充一个矩形
CGContextFillRect(ctx , CGRectMake(80 , 160 , 120 , 60));
// ---------下面绘制矩形边框---------
// 取消设置点线模式
CGContextSetLineDash(ctx, 0, 0, 0);
// 绘制一个矩形边框
CGContextStrokeRect(ctx , CGRectMake(30 , 230 , 120 , 60));
// 设置线条颜色
CGContextSetStrokeColorWithColor(ctx, [UIColor purpleColor].CGColor);
// 设置线条连接点的形状
CGContextSetLineJoin(ctx, kCGLineJoinRound);
// 绘制一个矩形边框
CGContextStrokeRect(ctx , CGRectMake(80 , 260 , 120 , 60));
// 设置线条颜色
CGContextSetRGBStrokeColor(ctx, 1.0, 0, 1.0 , 1.0);
// 设置线条连接点的形状
CGContextSetLineJoin(ctx, kCGLineJoinBevel);
// 绘制一个矩形边框
CGContextStrokeRect(ctx , CGRectMake(130 , 290 , 120 , 60));
// 设置线条颜色
CGContextSetRGBStrokeColor(ctx, 0, 1 , 1 , 1);
// ---------下面绘制和填充一个椭圆---------
// 绘制一个椭圆
CGContextStrokeEllipseInRect(ctx , CGRectMake(30 , 380 , 120 , 60));
// 设置填充颜色
CGContextSetRGBFillColor(ctx, 1, 0 , 1 , 1);
// 填充一个椭圆
CGContextFillEllipseInRect(ctx , CGRectMake(180 , 380 , 120 , 60));
}
2、绘制文本
- (void)drawRect:(CGRect)rect
{
// 获取该控件的绘图CGContextRef
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 设置字符间距
CGContextSetCharacterSpacing (ctx, 4);
// 设置填充颜色
CGContextSetRGBFillColor (ctx, 1, 0, 1, 1);
// 设置线条颜色
CGContextSetRGBStrokeColor (ctx, 0, 0, 1, 1);
// 设置使用填充模式绘制文字
CGContextSetTextDrawingMode (ctx, kCGTextFill);
// 绘制文字[@"我爱iOS" drawAtPoint:CGPointMake(10 ,20)
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial Rounded MT Bold" size: 45],NSFontAttributeName,[UIColor magentaColor] , NSForegroundColorAttributeName , nil]];// 设置使用描边模式绘制文字
CGContextSetTextDrawingMode (ctx, kCGTextStroke);
// 绘制文字
[@"我爱学习" drawAtPoint:CGPointMake(10 ,80)
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Heiti SC" size: 40],NSFontAttributeName,[UIColor blueColor] , NSForegroundColorAttributeName , nil]];// 设置使用填充、描边模式绘制文字
CGContextSetTextDrawingMode (ctx, kCGTextFillStroke);
// 绘制文字
[@"学习不爱我" drawAtPoint:CGPointMake(10 ,130)
withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Heiti SC" size: 50], NSFontAttributeName,[UIColor magentaColor] , NSForegroundColorAttributeName , nil]];// 定义一个垂直镜像的变换矩阵
CGAffineTransform yRevert = CGAffineTransformMake(1, 0, 0, -1, 0, 0);
// 设置绘制文本的字体和字体大小
CGContextSelectFont (ctx, "Courier New" , 40
,kCGEncodingMacRoman);// 为yRevert变换矩阵根据scaleRate添加缩放变换矩阵
CGAffineTransform scale = CGAffineTransformScale(yRevert,
self.scaleRate, self.scaleRate);// 为scale变换矩阵根据rotateAngle添加旋转变换矩阵CGAffineTransform rotate = CGAffineTransformRotate(scale
, M_PI * self.rotateAngle / 180);// 对CGContextRef绘制文字时应用变换
CGContextSetTextMatrix(ctx, rotate);
// 绘制文本
CGContextShowTextAtPoint(ctx, 50, 300, "crazyit.org", 11);
}
大体差不多就是这样,其实就是很多API你自己拿来用就行了,只要理解那些API是什么意思,具体是设置什么属性就好了,只是这里的API有点多,所以让人感觉很繁琐,只要你有兴趣,多去尝试就能熟悉了,总之就是多玩。
iOS绘图——Quartz 2D使用方法相关推荐
- iOS 使用Quartz 2D画虚线 .
画虚线需要用到函数: CGContextSetLineDash 此函数需要四个参数: context – 这个不用多说 phase - 稍后再说 lengths – 指明虚线是如何交替绘制,具体看例子 ...
- iOS 《Quartz 2D编程指南》之【图片裁剪】(包含完整demo源码) :
文章目录 前言 I.知识储备 1.1 核心步骤 II.例子 2.1 代码 2.2 用法 2.3 demo 仓库地址 前言 效果 I.知识储备 裁剪感兴趣的部分 Modifies the current ...
- iOS 《Quartz 2D编程指南》之【图片水印】(包含完整demo源码)
文章目录 前言 I.知识储备 1.1 核心步骤 II.例子 2.1 代码 2.2 用法 2.3 demo 仓库地址 前言 效果 I.知识储备 核心API @interface NSString(NSS ...
- iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...
- iOS 2D绘图详解(Quartz 2D)之概述
原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView ...
- iOS开发之Quartz 2D绘图
2019独角兽企业重金招聘Python工程师标准>>> Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境 Quartz 2D API可以实现许多功能,如 ...
- 绘图与滤镜全面解析--Quartz 2D 、Core Image
绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2 ...
- quartz c语言,IOS学习之—— Quartz 2D (C语言的框架)
//************************************************************************************************** ...
- Quartz 2D绘图简介
Quartz 2D绘图 简介 Quartz 2D是2D绘图引擎,适用iOS和Mac OS X程序.它提供底层轻量级的接口,并且会根据输出显示设备提供不匹配的逼真的画面 .Quartz 2D是与分辨率 ...
最新文章
- Spirng MVC +Velocity 表单绑定命令对象
- 上传失败 已保存至草稿_特大福利 清睿口语100成都会议专家讲座视频已上传至口语100网站...
- git log 迁移_现场故事:从Log4J迁移到Log4J2
- 重学java基础第十六课:jdk jre jvm
- 无网络访问权限怎么办_老司机教你IPV4无网络访问权限怎么办
- 关于Python在Linux、Mac和Windows上的安装方法总结
- python十大重点_你见过的最全面的 Python 重点
- Nginx源码阅读 ---- 模块的初始化过程,工作进程中初始化事件模块
- html网页设计的难点,在做设计与制作网页中主要难点是什么?
- 基于R语言的Kaggle案例分析学习笔记(七)
- 拔丝芋头的Java学习日记---Day9
- ubuntu安装搜狗输入法老是没中文怎么办
- Centos7.2安装搜狗拼音
- mySQL提取姓氏_MySQL 提取姓名大写首字母缩写
- windows 7软件
- 分布式 - ElasticSearch解决大数据量检索难题
- linux一分钟关机命令,Linux关机命令集合
- 将电脑本地视频转成rtsp和rtmp视频流
- GPS定位系统源码,通用系统源码包含GPS行业核心功能可轻松开发出各类行业应用
- 马云马化腾都不行,今天谁也不能阻止我吹一波马斯克!