0

我想基本上制作一个从 0-100 匹配值的虚线圆圈。我不想得到代表不同 10 点增量的 10 个不同图像。我该怎么做?

在此处输入图像描述

像这样的东西

4

3 回答 3

4

虽然我不熟悉 iOS 或 Objective-C,但这个概念是通用的。

圆上任意一点的位置可以描述为sin(angle)*radius,cos(angle)*radius。因此,您可以按照这个概念(在伪代码中)自己画一个这样的圆圈:

drawCircle(radius, borderWidth, dashDensity)
{
    int numberOfDashes = radius / dashDensity);
    float radsPerDash = pi * 2 / numberOfDashes;
    float innerRadius = radius - (borderWidth / 2);
    float outerRadius = radius + (borderWidth / 2);

    for(float angle = 0; angle < pi * 2; angle += radsPerDash)
        DrawLine(sin(angle)*innerRadius, cos(angle)*innerRadius,
                 sin(angle)*outerRadius, cos(angle)*outerRadius);
}

您应该能够从这里使它看起来像您想要的那样。dashDensity当然,您也可以使用神奇的常数自动计算radius,并使用您认为适合较粗破折号的线宽。

对于半圆(例如 85% 填充),更改循环的结束条件:

for(float angle = 0; angle < (pi * 2 * 0.85); angle += radsPerDash)
于 2013-06-14T02:29:13.677 回答
1

制作 UIView 的自定义子类。

覆盖drawRect。

在其中,您将使用以下功能:

  • UIGraphicsGetCurrentContext
  • CGContextBeginPath
  • 一些画线功能
  • CGContextClosePath
  • CGContextDrawPath

如果您查找这些函数的文档,您会很快找到对所需函数的交叉引用。

于 2013-06-14T03:32:53.363 回答
1

很抱歉在这里说rtm,但是这样做。CGPathCreateMutable用和创建圆CGPathAddArc,然后使用CGPathCreateCopyByDashingPath。完毕。

于 2013-06-14T05:06:48.693 回答