画虚线需要用到函数:

CGContextSetLineDash

此函数需要四个参数:

  • context – 这个不用多说
  • phase - 稍后再说
  • lengths – 指明虚线是如何交替绘制,具体看例子
  • count – lengths数组的长度
[cpp] view plaincopyprint?
  1. CGContextRef context =UIGraphicsGetCurrentContext();
  2. CGContextBeginPath(context);
  3. CGContextSetLineWidth(context, 2.0);
  4. CGContextSetStrokeColorWithColor(context, [UIColorwhiteColor].CGColor);
  5. float lengths[] = {10,10};
  6. CGContextSetLineDash(context, 0, lengths,2);
  7. CGContextMoveToPoint(context, 10.0, 20.0);
  8. CGContextAddLineToPoint(context, 310.0,20.0);
  9. CGContextStrokePath(context);
  10. CGContextClosePath(context);
CGContextRef context =UIGraphicsGetCurrentContext();
CGContextBeginPath(context);
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColorwhiteColor].CGColor);
float lengths[] = {10,10};
CGContextSetLineDash(context, 0, lengths,2);
CGContextMoveToPoint(context, 10.0, 20.0);
CGContextAddLineToPoint(context, 310.0,20.0);
CGContextStrokePath(context);
CGContextClosePath(context);

lengths的值{10,10}表示先绘制10个点,再跳过10个点,如此反复,如图:

如果把lengths值改为{10, 20, 10},则表示先绘制10个点,跳过20个点,绘制10个点,跳过10个点,再绘制20个点,如此反复,如图:

注意count的值等于lengths数组的长度

phase参数表示在第一个虚线绘制的时候跳过多少个点,举例说明:

[cpp] view plaincopyprint?
  1. float lengths[] = {10,5};
  2. CGContextSetLineDash(context, 0, lengths, 2);
  3. CGContextMoveToPoint(context, 0.0, 20.0);
  4. CGContextAddLineToPoint(context, 310.0, 20.0);
  5. CGContextStrokePath(context);
  6. CGContextSetLineDash(context, 5, lengths, 2);
  7. CGContextMoveToPoint(context, 0.0, 40.0);
  8. CGContextAddLineToPoint(context, 310.0, 40.0);
  9. CGContextStrokePath(context);
  10. CGContextSetLineDash(context, 8, lengths, 2);
  11. CGContextMoveToPoint(context, 0.0, 60.0);
  12. CGContextAddLineToPoint(context, 310.0, 60.);
  13. CGContextStrokePath(context);
float lengths[] = {10,5};
CGContextSetLineDash(context, 0, lengths, 2);
CGContextMoveToPoint(context, 0.0, 20.0);
CGContextAddLineToPoint(context, 310.0, 20.0);
CGContextStrokePath(context);CGContextSetLineDash(context, 5, lengths, 2);
CGContextMoveToPoint(context, 0.0, 40.0);
CGContextAddLineToPoint(context, 310.0, 40.0);
CGContextStrokePath(context);           CGContextSetLineDash(context, 8, lengths, 2);
CGContextMoveToPoint(context, 0.0, 60.0);
CGContextAddLineToPoint(context, 310.0, 60.);
CGContextStrokePath(context); 

如图显示:

由于lengths值为{10,5},第一条线就是绘制10,跳过5,反复绘制。

第二条线的phase值为5,则首先绘制【10减去5】,再跳过5,绘制10,反复绘制。

第三条给也如此,先绘制2,再跳过5,如此反复。

转载于:https://www.cnblogs.com/gaoxiao228/archive/2012/12/04/2800984.html

iOS 使用Quartz 2D画虚线 .相关推荐

  1. iOS绘图——Quartz 2D使用方法

    自定义UIView时,只需要重写drawRect:方法 使用Quartz 2D其实也很简单 首先必须要获取绘图的环境,即获取上下文CGContextRef 然后使用各种API进行绘图就可以了(这里有很 ...

  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开发之Quartz 2D绘图

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

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

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

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

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

  8. Quartz 2D Programming Guide笔记

    ###Graphics Contexts图形上下文### 图形上下文(graphics context)是绘制目标,可以理解为画布,包含着绘图时的参数和设备信息.类型为CGContextRef.获取g ...

  9. iPhone开发笔记[1/50]:初学iPhone上用Quartz 2D画图

    参考了An iOS 4 iPhone Graphics Drawing Tutorial using Quartz 2D这篇文章,用了30分钟在iPhone上画出了一条直线,核心代码全在drawRec ...

最新文章

  1. [转]HTTP协议详解
  2. NVIDIA Jetson Xavier NX上导入tensorflow报错:AttributeError: module ‘wrapt‘ has no attribute ‘ObjectProxy‘
  3. Python Django 自定义Manager重写objects.create()方法代码示例
  4. JavaSE各阶段练习题----集合-Collection-Set-List
  5. Java开发必会的反编译知识
  6. 调用gserverdkey dll的飞鸽传书2012
  7. Passing the Message(HDU-3410)
  8. 史上最快! 10小时大数据入门(一)-大数据概述
  9. 累计增量备份策略_数据安全与备份解决方案ZDLRA快速恢复
  10. [P4063][JXOI2017]数列(DP)
  11. 【Linux】Linux Systemd 启动守护进程
  12. 二维码_encode与decode
  13. css绘制向左三角形_CSS绘制三角形—border法
  14. 对区块链撒谎:将“垃圾进,垃圾出”问题应用在去中心化网络上
  15. 学生免费获取PyCharm专业版
  16. wps如何在目录里面打省略号_wps中目录的点怎么打(目录的点点怎样手动打)
  17. 02 - 语义网络,语义网,链接数据和知识图谱
  18. cmd命令重启服务器
  19. [ZT]迅雷的工作原理
  20. 谷歌SEO中PBN外链是否值得做

热门文章

  1. 不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%
  2. 进程与线程的一个简单解释
  3. AI在软硬件开发中的应用落地!
  4. 机器学习数学基础:常见分布与假设检验
  5. CV十年发展之观察:1.5万篇论文透视「业界」与「学界」,到底谁更胜一筹?...
  6. 超越PVT、Swin,南大开源高效Transformer:ResT​
  7. 小心!你下载的机器学习工具包可能是病毒:CuPy被掉包,官方一天后才发现
  8. 理解卷积神经网络中的自注意力机制
  9. 十九种损失函数,你能认识几个?
  10. Linux内核网络栈1.2.13-tcp.c概述