2012-04-02 5 views
1

Я делаю график с кварцем, следуя этому tutorial.Графический график с четкими линиями с кварцем

Это мой жестко закодированы класс:

#import "GraphView.h" 

#define kGraphHeight 110 
#define kDefaultGraphWidth 900 
#define kOffsetX 0 
#define kStepX 50 
#define kStepY 50 
#define kOffsetY 10 
#define kGraphBottom 110 
#define kGraphTop 0 
#define kBarTop 10 
#define kBarWidth 40 
#define kCircleRadius 3 

@implementation GraphView 

float data[] = {0.7, 0.4, 0.9, 1.0, 0.2, 0.85, 0.11, 0.75, 0.53, 0.44, 0.88, 0.77, 0.99, 0.55}; 

- (void)drawLineGraphWithContext:(CGContextRef)ctx 
{ 
    CGContextSetLineWidth(ctx, 0.2); 
    CGContextSetStrokeColorWithColor(ctx, [[UIColor colorWithRed:1.0 green:0.5 blue:0 alpha:1.0] CGColor]); 

    int maxGraphHeight = kGraphHeight - kOffsetY; 

    CGContextBeginPath(ctx); 
    CGContextMoveToPoint(ctx, kOffsetX, kGraphHeight - maxGraphHeight * data[0]); 
    for (int i = 1; i < sizeof(data); i++) 
    { 
     CGContextAddLineToPoint(ctx, kOffsetX + i * kStepX, kGraphHeight - maxGraphHeight * data[i]); 
    } 
    CGContextDrawPath(ctx, kCGPathStroke); 
    CGContextSetFillColorWithColor(ctx, [[UIColor colorWithRed:1.0 green:0.5 blue:0 alpha:1.0] CGColor]); 
} 

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetAllowsAntialiasing(context, true); 
    for (int i = 0; i < sizeof(data); i++) 
    { 
     [self drawLineGraphWithContext:context]; 
    } 
} 

@end 

И это результат:

enter image description here

Как вы можете видеть, линии не может быть менее гладкой. Они не выглядят хорошо. Пробовал с сглаживанием, но ничего не изменилось, как я могу улучшить качество линий?

Спасибо!

ответ

3

Ваша ширина линии должна быть 2,0, а не 0,2. Это будет сложно сделать для вас приличной линией, маленькой.

Также представляется, что вы рисуете график n раз, где n - ваше количество точек данных - у вас есть цикл for в drawRect и в методе drawInContext.

Вам не нужно устанавливать какие-либо сглаживание, по умолчанию должно быть правильно.

+0

Вы правы, я так f! @ # Стыдно. Я рисовал и перерисовывал, поэтому это выглядело так плохо. Удалил цикл for из drawRect. – ferostar

Смежные вопросы