iPhoneアプリで円グラフを作成していますが、正常に動作しますが、各セクションのパーセンテージを17%、25%などで表示したい.
次のコードを使用しています
-(void)createGraph
{
PieClass *myPieClass=[[PieClass alloc]initWithFrame:CGRectMake(50,440,320,230)];
myPieClass.backgroundColor=[UIColor clearColor];
myPieClass.itemArray=[[NSArray alloc]initWithObjects:valueOne,valueTwo,valueThree,valueFour, nil];
myPieClass.myColorArray=[[NSArray alloc]initWithObjects:[UIColor blueColor],[UIColor redColor],[UIColor greenColor],[UIColor brownColor], nil];
myPieClass.radius=100;
[self.view addSubview:myPieClass];
}
パイ教室
#import <UIKit/UIKit.h>
@interface PieClass : UIView
{
NSArray* itemArray;
NSArray* myColorArray;
int radius;
}
@property(nonatomic,retain)NSArray* itemArray;
@property(nonatomic,retain)NSArray* myColorArray;
@property(nonatomic,assign) int radius;
@end
#import "PieClass.h"
@implementation PieClass
@synthesize itemArray,myColorArray,radius;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
// drawRect のみをオーバーライド: カスタム描画を実行する場合。// 空の実装は、アニメーション中のパフォーマンスに悪影響を及ぼします。
- (void)drawRect:(CGRect)rect
{
// Drawing code
int c=[itemArray count];
CGFloat angleArray[c];
CGFloat offset;
int sum=0;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetAllowsAntialiasing(context, false);
CGContextSetShouldAntialias(context, false);
for(int i=0;i<[itemArray count];i++)
sum+=[[itemArray objectAtIndex:i] intValue];
for(int i=0;i<[itemArray count];i++)
{
angleArray[i]=(float)(([[itemArray objectAtIndex:i] intValue])/(float)sum)*(2*3.14); // in radians
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 *)[myColorArray objectAtIndex:i]).CGColor);
CGContextClosePath(context);
CGContextFillPath(context);
}
}