在Objective-c中绘制圆圈

时间:2012-07-01 12:05:54

标签: iphone objective-c ios drawing geometry

我是iPhone编程的初学者。我需要创建如图1所示的圆圈,它应该分成六个不同的部分,有四个不同的级别(见图1)。此外,我需要根据给定的数据创建一个圆圈,如图2所示。每个零件都应该可以单击以缩放特定零件(参见图3)。

enter image description here
图1:说明六种不同的颜色,其中两种颜色分为一种,其余四种颜色分为三种颜色。
enter image description here
图2:显示不同级别的不同类别的结果 enter image description here
图3:是所选类别的放大视野
我有一个故事板,可以加载自定义UIView并使用drawRect方法绘制圆圈。

现在的问题是,如何像数字一样创建饼图?

我尝试过很多东西并且可以使用一些指导 - 或者请举一个这样的例子 谢谢

4 个答案:

答案 0 :(得分:4)

查看Quartz 2D Programming Guide,尤其是EllipsesClipping to Paths部分。其余的只是一些基本的数学和几何。

你是UIView的子类,使用Quartz 2D框架绘制你的圈子,并可能实现touchesBegan:touchesEnded:方法来处理圈子上的点击。

答案 1 :(得分:1)

如果您以任何方式想要更改动画(例如放大最后一张图片中的类别),那么您应该尝试尽可能多地使用Core Animation。

看看this great tutorial on making a custom animatable pie chart with Core Animation。我确定你可以修改它以获得你想要的东西。

另外,如果你不关心动画并且只显示从一个状态跳到另一个状态的圆圈就可以了,那么Core Animation可能会让事情变得过于复杂,就像Core Graphics一样(就像提到的其他答案一样)可能是正确的方法。

答案 2 :(得分:1)

饼图示例:

int sum = 0;
CGFloat offset;
CGFloat angleArray[numberOfSections+1];

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetAllowsAntialiasing(context, true);
CGContextSetShouldAntialias(context, true);

for(int i=0; i<numberOfSections; i++) {
    sum += angle;
}

for(int i=0; i<numberOfSections; i++) {
    angleArray[i] = (float)((angle)/(float)sum)*(2*M_PI); 
    CGContextMoveToPoint(context, radius, radius);

    if(i == 0) {
        CGContextAddArc(context, radius, radius, radius, 0, angleArray[i], 0);
    } else {
        CGContextAddArc(context, radius, radius, radius, offset, (offset+angleArray[i]), 0);
    }
    offset += angleArray[i];

    CGContextSetFillColorWithColor(context, ((UIColor *)[hjulColorArray objectAtIndex:i]).CGColor);
    CGContextClosePath(context); 
    CGContextFillPath(context);
}

答案 3 :(得分:0)

实际上我认为这个修订后的答案对你来说会有更长的帮助。看看这些文档:

CGPathAddLineToPoint    
CGPathAddArc

这就是我过去所做的基本上就是你想做的事情。