4

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

在此处输入图像描述
图 1:说明了六种不同的颜色,其中两种被分成一个,其余四种被分成三个部分。
在此处输入图像描述
图 2:显示不同级别的不同类别的结果。
在此处输入图像描述
图 3:所选类别的放大图。

我有一个情节提要,它加载加载自定义 UIView 并使用 drawRect 方法绘制圆。

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

我已经尝试了很多事情并且可以使用一些指导 - 或者请举一个例子。
谢谢

4

4 回答 4

4

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

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

于 2012-07-01T12:10:17.943 回答
1

如果您以任何方式希望更改动画(例如当您放大最后一张图像中的类别时),那么您应该尝试尽可能多地使用核心动画。

看看这个关于使用 Core Animation 制作自定义动画饼图的精彩教程。我相信你可以修改它以获得你想要的。

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

于 2012-07-15T11:33:12.620 回答
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);
}
于 2012-07-27T14:59:19.253 回答
0

实际上,我认为从长远来看,这个修改后的答案会为您提供更多帮助。查看这些文档:

CGPathAddLineToPoint    
CGPathAddArc

这就是我过去所做的,基本上正是你想要做的。

于 2012-07-01T14:04:47.223 回答