我想基本上制作一个从 0-100 匹配值的虚线圆圈。我不想得到代表不同 10 点增量的 10 个不同图像。我该怎么做?
像这样的东西
虽然我不熟悉 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)
制作 UIView 的自定义子类。
覆盖drawRect。
在其中,您将使用以下功能:
如果您查找这些函数的文档,您会很快找到对所需函数的交叉引用。
很抱歉在这里说rtm,但是这样做。CGPathCreateMutable
用和创建圆CGPathAddArc
,然后使用CGPathCreateCopyByDashingPath
。完毕。