自定义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使用方法相关推荐

  1. iOS 使用Quartz 2D画虚线 .

    画虚线需要用到函数: CGContextSetLineDash 此函数需要四个参数: context – 这个不用多说 phase - 稍后再说 lengths – 指明虚线是如何交替绘制,具体看例子 ...

  2. iOS 《Quartz 2D编程指南》之【图片裁剪】(包含完整demo源码) :

    文章目录 前言 I.知识储备 1.1 核心步骤 II.例子 2.1 代码 2.2 用法 2.3 demo 仓库地址 前言 效果 I.知识储备 裁剪感兴趣的部分 Modifies the current ...

  3. iOS 《Quartz 2D编程指南》之【图片水印】(包含完整demo源码)

    文章目录 前言 I.知识储备 1.1 核心步骤 II.例子 2.1 代码 2.2 用法 2.3 demo 仓库地址 前言 效果 I.知识储备 核心API @interface NSString(NSS ...

  4. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  5. iOS 2D绘图详解(Quartz 2D)之概述

    原创Blog,转载请注明出处  http://blog.csdn.net/hello_hwc?viewmode=list 前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView ...

  6. iOS开发之Quartz 2D绘图

    2019独角兽企业重金招聘Python工程师标准>>> Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境 Quartz 2D API可以实现许多功能,如 ...

  7. 绘图与滤镜全面解析--Quartz 2D 、Core Image

    绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2 ...

  8. quartz c语言,IOS学习之—— Quartz 2D (C语言的框架)

    //************************************************************************************************** ...

  9. Quartz 2D绘图简介

    Quartz 2D绘图 简介 Quartz 2D是2D绘图引擎,适用iOS和Mac OS X程序.它提供底层轻量级的接口,并且会根据输出显示设备提供不匹配的逼真的画面  .Quartz 2D是与分辨率 ...

最新文章

  1. Spirng MVC +Velocity 表单绑定命令对象
  2. 上传失败 已保存至草稿_特大福利 清睿口语100成都会议专家讲座视频已上传至口语100网站...
  3. git log 迁移_现场故事:从Log4J迁移到Log4J2
  4. 重学java基础第十六课:jdk jre jvm
  5. 无网络访问权限怎么办_老司机教你IPV4无网络访问权限怎么办
  6. 关于Python在Linux、Mac和Windows上的安装方法总结
  7. python十大重点_你见过的最全面的 Python 重点
  8. Nginx源码阅读 ---- 模块的初始化过程,工作进程中初始化事件模块
  9. html网页设计的难点,在做设计与制作网页中主要难点是什么?
  10. 基于R语言的Kaggle案例分析学习笔记(七)
  11. 拔丝芋头的Java学习日记---Day9
  12. ubuntu安装搜狗输入法老是没中文怎么办
  13. Centos7.2安装搜狗拼音
  14. mySQL提取姓氏_MySQL 提取姓名大写首字母缩写
  15. windows 7软件
  16. 分布式 - ElasticSearch解决大数据量检索难题
  17. linux一分钟关机命令,Linux关机命令集合
  18. 将电脑本地视频转成rtsp和rtmp视频流
  19. GPS定位系统源码,通用系统源码包含GPS行业核心功能可轻松开发出各类行业应用
  20. 马云马化腾都不行,今天谁也不能阻止我吹一波马斯克!

热门文章

  1. Threat Intelligence videos
  2. 女生相亲了个年薪50万的程序员,看到对方工作状态后:要不要继续
  3. 销售文案里的促销价格怎样设置更有效?
  4. LeetCode | Climbing Stairs
  5. 基于android的网络音乐播放器-网络音乐的多线程下载(六)
  6. Linux应用程序应该存放在什么位置
  7. 【汇编程序】实现1-100偶数求和
  8. 最强战队出炉!“嬴彻-清华AIR杯”自动驾驶挑战赛收官
  9. volatile使用场景
  10. SI疾病传播模型实现