• 图文虚线之CGContextSetLineDash


    CGContextSetLineDash(CGContextRef cg_nullable c, CGFloat phase, const CGFloat * __nullable lengths, size_t count)

    • 设置虚线点的大小以及虚线点间隔大小的方法

    参数

    • c 上下文内容
    • lengths 传入一个C语言的数组, 如下表示绘制1个点, 跳过10个点, 如此循环
    1. // 部分代码
    2. CGFloat components[] = {1,10};
    3. CGContextSetLineDash(context, 0, components, 2);

    绘制1个点, 跳过10个点

    绘制10个点, 跳过1个点

    仔细看, 其实当数组传入的是{0,10}, 0也是能看到一个很小的点的

    • count 就是传入lengths这个数组的长度, 如上面的components数组, count应该传入2, 如果count的数值和lengths数组的长度不一致, 每次生成的虚线可能都不一样
    • phase 虚线相位, 第一个虚线绘制的时候跳过多少个点, 相当于向左移动了虚线, 如下代码及结果(忽略截图长度)
    1. // 部分代码
    2. CGFloat components[] = {1,10};
    3. CGContextSetLineDash(context, 0, components, 2);
    4. CGFloat components[] = {1,10};
    5. CGContextSetLineDash(context, 5, components, 2);
    6. CGFloat components[] = {100,1};
    7. CGContextSetLineDash(context, 0, components, 2);
    8. CGFloat components[] = {100,1};
    9. CGContextSetLineDash(context, 50, components, 2);


     

    下面我们画一个虚线半圆:    

    -(void)drawRect:(CGRect)rect{

        CGContextRef context = UIGraphicsGetCurrentContext();

        CGContextSetStrokeColorWithColor(context, UIColor.whiteColor.CGColor);

        CGContextSetLineWidth(context, 1.0);

        CGContextAddArc(context, kScreen_Width/2, 148, 128, 0, M_PI, 1);

        CGFloat components[] = {5,1};

        CGContextSetLineDash(context, 2, components, 2);

        CGContextDrawPath(context, kCGPathStroke);

    }

    效果图如下

     

  • 相关阅读:
    java复习-线程的同步和死锁
    Nginx反向代理
    整合JVM-SANDBOX与VMTOOL,实现支持OGNL的增强自定义MOCK
    这些项目管理实际问题,你遇到过几个
    基于Android校园失物招领系统
    IDEA提交本地项目到Gitee远程仓库
    每日练习-7
    java计算机毕业设计网络教学系统源码+系统+数据库+lw文档
    第七节:类和对象【一】【java】
    数据结构与算法知识点总结(5)查找树
  • 原文地址:https://blog.csdn.net/u013712343/article/details/127664688