我在iPhone编程初学者。 我需要像图1,它应该在六个不同部位与四个不同的水平(见图1)可分为建立社交圈。 此外,我需要根据给定的数据以创建一个圆,因为它是示于图2。每个部分应点击能够放大特定部分(参见图3)。
图1:说明了六种不同的颜色,其中,其中的两个在一个被划分和他们的其余四个三个部分被划分。
图2:示出了不同的类别中不同水平的结果。
图3:选择类别的放大视野。
我有它加载加载自定义的UIView,并使用的drawRect方法绘制圆一个故事板。
现在的问题是,如何创建饼图喜欢的数字?
我曾尝试很多东西,可以使用一些guideness - 或者请给一个这样的例子。
谢谢
看看在石英2D编程指南 ,特别是省略号和裁剪为路径的部分。 剩下的只是一些基本的数学和几何形状。
你的子类的UIView,使用石英2D框架绘制自己的圈子,并可能实现touchesBegan:
和touchesEnded:
方法来处理在圆水龙头。
如果你以任何方式希望有变化动画(比如当你放大一个类别的最后一个图像中),那么你确实应该尝试使用尽可能多的核心动画成为可能。
看看上制作一个自定义动画饼图与核心动画这个伟大的教程 。 我敢肯定,你可以修改它来得到你想要的。
另外,如果你不关心动画和都还好用,从状态跳到状态只显示圆圈则核心动画将可能只会让事情过于复杂和东西一样核芯显卡(如提到的其他答案)可能是正确的方式去。
饼图实施例:
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);
}
其实我觉得这个修订的回答将帮助你更从长远来看。 看看这些文档:
CGPathAddLineToPoint
CGPathAddArc
这是我用来做基本上什么你要怎样做。