我想基本上制作一个虚线圆圈,匹配0-100的值。我不想得到10个不同的图像代表不同的10点增量。我该怎么办?
像这样的东西
答案 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。
在其中,您将使用以下功能:
如果您查看这些功能的文档,您将很快找到所需功能的交叉引用。
答案 2 :(得分:1)
很抱歉在这里说rtm,但要这样做。使用CGPathCreateMutable
和CGPathAddArc
创建圈子,然后使用CGPathCreateCopyByDashingPath
。完成。