2

我使用以下代码创建了一个饼图。在这里,我将xy作为 100% 的总和以在饼图上显示x%为红色和y%绿色。

在红色上我想显示确切的x%(示例45%(或)55%),在绿色上我想显示确切的y%(示例55%(或)45%)。

在我的应用程序中,XY值是变量。每次我运行我的应用程序时,这些值都会发生变化。我想用绿色和红色显示饼图以及这些区域的百分比。我如何制作框架以显示该区域的百分比?

.m 文件

- (void)drawRect:(CGRect)rect
{
// Drawing code

 int x = 25;
 int y = 42;

 float sum = x + y;
 float mult = (360/sum);

 float startDeg = 0;
 float endDeg = 0;

 int x = 74;
 int y = 60;
 int r = 60;

 CGContextRef ctx = UIGraphicsGetCurrentContext();
 CGContextSetRGBStrokeColor(ctx, 1.0, 1.0, 1.0, 1.0);
 CGContextSetLineWidth(ctx, 2.0);

 startDeg = 0;
 endDeg = (x * mult);
 if(startDeg != endDeg)
 {
 CGContextSetRGBFillColor(ctx, 0.0, 0.8, 0.0, 1.0);
 CGContextMoveToPoint(ctx, x, y);
 CGContextAddArc(ctx, x, y, r, (startDeg)*M_PI/180.0, (endDeg)*M_PI/180.0, 0);
 CGContextClosePath(ctx);
 CGContextFillPath(ctx);
 }

 startDeg = endDeg;
 endDeg = endDeg + (y * mult);
 if(startDeg != endDeg)
 {
 CGContextSetRGBFillColor(ctx, 0.8, 0.0, 0.0, 1.0);
 CGContextMoveToPoint(ctx, x, y);
 CGContextAddArc(ctx, x, y, r, (startDeg)*M_PI/180.0, (endDeg)*M_PI/180.0, 0);
 CGContextClosePath(ctx);
 CGContextFillPath(ctx);
 }
}
4

1 回答 1

4

您可以在 drawRect 方法中使用 NSString drawInRect 绘制一个字符串。例如:

[percentageString drawInRect:CGRectMake(100, 100, 30, 20) 
                    withFont:font 
               lineBreakMode:UILineBreakModeClip 
                   alignment:UITextAlignmentLeft];

更新

以下是如何找到用于放置文本的 x、y:

CGFloat startDegree = 180;                             // start at 180
CGFloat endDegree = degree;                            // end at some value

CGFloat mid = (endDegree + startDegree) / 2;           // find midpoint
CGFloat rad = DEGREES_TO_RADIANS(mid);                 // convert to radians


// center is center of pie chart
// radius is how big the pie chart is
// 30 is extra to draw text outside circle

CGFloat x =  center.x + ((radius + 30) * cos(rad));    
CGFloat y = center.y + ((radius + 30) * sin(rad));

NSLog(@"X Y: %f %f %f", x, y, degree);

NSString *text = @"Test";   
[text drawInRect:CGRectMake(x, y, 50, 44) withFont:[UIFont systemFontOfSize:14.0f]];

我有一个示例饼图,所以我使用了它。它有一个带度数的滑块。在示例中,我可以从 180 度到 360 度绘制饼图的一部分。

于 2012-04-30T13:56:25.923 回答