iOS 使用Quartz 2D画虚线

画虚线需要用到函数:

CGContextSetLineDash

此函数需要四个参数:

  • context – 这个不用多说
  • phase - 稍后再说
  • lengths – 指明虚线是如何交替绘制,具体看例子
  • count – lengths数组的长度
CGContextRef context =UIGraphicsGetCurrentContext();
CGContextBeginPath(context);
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
CGFloat 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参数表示在第一个虚线绘制的时候跳过多少个点,举例说明:

CGFloat 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,如此反复。

 

UPDATE:

以下是一个Swift画虚线的小例子,总体上是差不多的,直接把这个View放到ViewController中即可使用:

class CustomView: UIView {

    var beginPoint: CGPoint = CGPointZero

    var endPoint: CGPoint?

    

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

        beginPoint = touches.anyObject()!.locationInView(self)

    }

    

    override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {

        endPoint = touches.anyObject()?.locationInView(self)

        

        setNeedsDisplay()

    }

    

    override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {

        endPoint = touches.anyObject()?.locationInView(self)

        

        setNeedsDisplay()

    }

    

    override func drawRect(rect: CGRect) {

        if let point = endPoint {

            let context = UIGraphicsGetCurrentContext()

            let lengths: [CGFloat] = [5.0, 5.0]

            CGContextSetLineDash(context, 0, lengths, 2);

            CGContextMoveToPoint(context, beginPoint.x, beginPoint.y);

            CGContextAddLineToPoint(context, point.x, point.y);

            CGContextStrokePath(context);

        }

    }

}

时间: 2024-12-24 07:09:43

iOS 使用Quartz 2D画虚线的相关文章

iOS - Quartz 2D 二维绘图

1.Quartz 2D 简介 Quartz 2D 属于 Core Graphics(所以大多数相关方法的都是以 CG 开头),是 iOS/Mac OSX 提供的在内核之上的强大的 2D 绘图引擎,并且这个绘图引擎是设备无关的.也就是说,不用关心设备的大小,设备的分辨率,只要利用 Quartz 2D,这些设备相关的会自动处理. 1.Quartz 2D 在 iOS 开发中的价值 绘制一些系统 UIKit 框架中不好展示的内容,例如饼图 自定义一些控件 不添加 UI 控件的情况下,使 UI 内容更丰富

iOS - Quartz 2D 贝塞尔曲线

1.贝塞尔曲线 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线.一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的.贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具,如 PhotoShop 等.在 Flash4 中还没有完整的曲线工具,而在 Flash5 里面已经提供出贝塞尔曲线工具. 二阶贝塞

iOS Quartz 2D相关笔记总结笔记 韩俊强的博客

一.基本理论和基本代码 概念总结 Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统.Quartz 2D能完成的工作:绘制图形 : 线条,三角形,矩形,圆,弧等:绘制文字绘制,生成图片(图像)读取,生成PDF截图,裁剪图片自定义UI控件等Quartz2D提供了以下几种类型的Graphics Context:Bitmap Graphics ContextPDF Graphics ContextWindow Graphics ContextLayer Graphics ContextP

Swift操作Quartz 2D进行简单的绘图与坐标变换的教程_Swift

Quartz 2D简介Quartz 2D是苹果公司开发的一个二维图形绘制引擎,同时支持iOS和Mac系统. 它是一套基于C的API框架,提供了低级别.轻量级.高保真度的2D渲染.它能完成的工作有: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 - Quartz 2D进行绘图iOS绘图技术主要有UIKit,Quartz 2D,Core Animation和OpenGL ES.我们平常对UIKit应该不陌生,而Quar

PS图片上怎么画虚线 PS图片上画虚线(图文)

  PS图片上怎么画虚线   PS图片上画虚线(图文)            完成效果: 下面是具体的制作方法介绍: 步骤一:新建一个随意大小的空白文档,为了视觉效果,建议在新建的时候选用白色为背景颜色.我新建的为300x300px 步骤二(重要):背景图层上面,新建一个透明图层. 步骤三:矩形选框工具,建立任意大小的矩形. 步骤四:1.画笔工具,设画笔大小为5~8px之间,硬度为100%. 2.画笔窗口,调节间距在140%左右. 步骤五:按住键盘shift键并单击矩形选框的四个顶点,得到如下图

PS直线工具怎么画虚线

  PS直线工具怎么画虚线.                    方法/步骤 1.打开ps软件,新建图层. 2.选择左侧工具栏中 画笔工具中的 铅笔工具. 3.点击 上方工具栏中的 窗口 选项中的 画笔工具. 4.设置画笔笔尖的形状,笔尖大小.硬度.间距. 5.用鼠标在画布上点一个点,同时按住shift键,点击第二个点,这时候,两点之间就会形成一条直的虚线. 注意事项 设置画笔间距时,要使下方预览时的间距有缝隙.           更多知识请关注 三联ps教程 栏目

ps怎么画虚线方框

ps怎么画虚线方框   下面是具体的制作方法介绍: 一.新建一个随意大小的空白文档,为了视觉效果,建议在新建的时候选用白色为背景颜色.我新建的为300x300px 二.背景图层上面,新建一个透明图层. 三.矩形选框工具,建立任意大小的矩形. 四.画笔工具,设画笔大小为5~8px之间,硬度为100%. 画笔窗口,调节间距在140%左右. 五.按住键盘shift键并单击矩形选框的四个顶点,得到如下图形. 六.选择-修改-收缩,收缩值为1. 七.按一下键盘上的delete,删除选框内区域.好了,虚线画

PS怎么画虚线曲线

  PS怎么画虚线曲线           第一步:用PS打开或者是新建一个我们需要用的图片: 第二步:找到工具面板中的画笔 铅笔等工具 调节成我们需要的大小即可 第三步:找到菜单栏中的窗口命令 找到铅笔工具 的设置 打开后根据我们需要的缝隙 间距大小 以及其他要求来调节画笔工具 第四步:找到需要画虚线的起点 按住shift+左键 找到需要画虚线的尾点 按住shift+左键 这个时候一条虚线就可以画出来了 是不是很方便呢? 下面在直线虚线额基础上延伸一下曲线虚线的画法: 第一步:先选中当前虚线路

PS另一种运用文字工具简单快速画虚线的方法教程

介绍用PS画虚线的方法,一般大家可能会想到通过设置画笔去画,本次介绍的方法更快速直接,直接利用键盘上的"__"减号即可制作出不同形状的虚线, 需要学习的同学可以看一下! 方法如下: 分类: PS入门教程