Я работаю над диаграммами, используя CORE GRAPHICS. Я успешно завершил рисование линейных диаграмм, гистограмм и диаграммы с одним графиком.Рисование нескольких графиков Guage за раз с использованием Coregraphics
Теперь Мое требование
Но когда я рисую в контексте, и я получаю только один график, как этот
Я взял проценты графиков в массиве и используя цикл for
, я рисовал все проценты в массиве, но конечный результат, который я получаю, - это всего лишь одна графическая диаграмма, которая является последним объектом в массиве.
Я нарисовал эти графики с использованием этих link
слегка изменил код и рисования диаграмм, как этот
код, я использую, чтобы нарисовать диаграмму Guage является
первый я звоню guagegraph (подкласс UIView
) от моего ViewController
percentageArray содержит процент каждого Guage
percentageArray = [[NSArray alloc] initWithObjects:@"80", @"76", @"92", @"49", nil];
for (int i = 0; i < percentageArray.count; i++)
{
[guageGraph setPercent:[percentageArray[i] intValue] withIndex:i];
}
затем в guagegraph ниже метод
- (void)setPercent:(int)percent withIndex:(int)i
{
CGFloat floatPercent = percent/100.0;
floatPercent = MIN(1, MAX(0, floatPercent));
percentLayer.percent = floatPercent;
percentLayer.i = i;
[self setNeedsLayout];
[percentLayer setNeedsDisplay];
}
затем вызвать класс percentLayer (подкласс CALayer
) и втягивание контекст
-(void)drawInContext:(CGContextRef)ctx
{
[self DrawRight:ctx];
[self DrawLeft:ctx];
}
-(void)DrawRight:(CGContextRef)ctx
{
CGPoint center = CGPointMake(self.frame.size.width/2, 160);
CGFloat delta = -toRadians(270 * percent);
CGContextSetFillColorWithColor(ctx, [UIColor orangeColor].CGColor);
CGContextSetLineWidth(ctx, 1);
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetAllowsAntialiasing(ctx, YES);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRelativeArc(path, NULL, center.x, center.y, 135 - 5 - (15 * i), (3 * M_PI/4), -delta);
CGPathAddRelativeArc(path, NULL, center.x, center.y, 150 - 5 - (15 * i), (3 * M_PI/4) - delta, delta);
CGPathAddLineToPoint(path, NULL, center.x, center.y);
CGContextAddPath(ctx, path);
CGContextFillPath(ctx);
}
-(void)DrawLeft:(CGContextRef)ctx
{
CGPoint center = CGPointMake(self.frame.size.width/2, 160);
CGFloat delta = toRadians(270 * (1 - percent));
CGContextSetFillColorWithColor(ctx, [UIColor groupTableViewBackgroundColor].CGColor);
CGContextSetLineWidth(ctx, 1);
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetAllowsAntialiasing(ctx, YES);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRelativeArc(path, NULL, center.x, center.y, 135 - 5 - (15 * i), (M_PI/4), -delta);
CGPathAddRelativeArc(path, NULL, center.x, center.y, 150 - 5 - (15 * i), (M_PI/4) - delta, delta);
CGPathAddLineToPoint(path, NULL, center.x, center.y);
CGContextAddPath(ctx, path);
CGContextFillPath(ctx);
}
drawRight
метод заключается в привлечении оранжевого цвета один и draw left
метод для рисования группы tableviewviewback окрашенного цвета.
Любая помощь приветствуется.
Я не получил u ..... пришел снова PLS @Fabian Buentello – sreekanthk
ну это звучит как '[guageGraph setPercent: [percentArray [i] intValue] withIndex: i];' устанавливает тот же вид и , пока он запускает это 'for loop'. Есть ли только один «просмотр» на странице? или у вас есть 'view' для каждого объекта внутри' percentArray'? –
есть только один вид – sreekanthk