如何绘制一条线

时间:2013-06-14 02:22:09

标签: ios

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

enter image description here

像这样的东西

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

制作UIView的自定义子类。

覆盖drawRect。

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

  • UIGraphicsGetCurrentContext
  • CGContextBeginPath
  • 一些线条绘制功能
  • CGContextClosePath
  • CGContextDrawPath

如果您查看这些功能的文档,您将很快找到所需功能的交叉引用。

答案 2 :(得分:1)

很抱歉在这里说rtm,但要这样做。使用CGPathCreateMutableCGPathAddArc创建圈子,然后使用CGPathCreateCopyByDashingPath。完成。