我需要在圆圈周围绘制一些大小均匀且间隔开的标签:
我是客观的。可以创建像这样的椭圆
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(84, 22, 75, 75)];
[UIColor.grayColor setFill];
[ovalPath fill];
试图弄清楚如何获取这些标签。谁能给我一些指示我如何解决这个问题?需要在圆圈周围绘制1到20个标签。想知道是否有某种算法。
答案 0 :(得分:1)
这需要你做一些数学运算。我不打算为你做数学,但我可以告诉你你需要做什么。
使用六个均匀间隔的标签,圆上每个标签的中心点相隔60度。如果我们假设0度是直线上升,那么您需要以0,60,120,180,240和300度为中心的标签。而且由于它看不到标签的边缘相遇,我假设每个标签都覆盖了50度的弧度。
看起来标签的顶部不是平坦的,而是较大圆圈的一部分。如果我们在图片r
中调用圆的半径,那么较大圆的半径为r + h
,其中h
是标签的高度。
如果第一个标签的中心位于0度,则第一个标签的左边缘为-25度(或335度),第一个标签的右边缘为25度。
所以,要绘制第一个标签:
r + h
的50度弧。然后对以60度为中心的弧做同样的事情。你的线条将在25度和85度。对其他标签重复该过程。
要以给定角度查找圆上的点,请参阅Calculating point on a circle's circumference from angle in C#?。
要绘制圆弧,请参阅http://www.raywenderlich.com/33193/core-graphics-tutorial-arcs-and-paths。
如果标签覆盖多于或少于50度的弧度,请相应调整上面的数字。也就是说,如果标签覆盖40度的弧度,那么第一个标签的左边缘将是-20(340)度,而不是-25(335)度。
请注意,您可能需要将所有度数测量值转换为弧度。