2012-04-02 14 views
1

Ich mache ein Diagramm mit Quarz, nach diesem tutorial.Glatte Linien zeichnen Graph mit Quarz

Das ist mein hartcodierte Klasse:

#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 

Und das ist das Ergebnis:

enter image description here

Wie Sie sehen können, werden die Linien nicht weniger glatt sein kann. Sie sehen überhaupt nicht gut aus. Mit Antialiasing versucht, aber nichts geändert, wie kann ich die Linienqualität verbessern?

Danke!

Antwort

3

Ihre Linienbreite sollte 2,0, nicht 0,2 sein. Es wird Ihnen schwer fallen, eine so kleine Linie zu ziehen.

Es scheint auch, dass Sie das Diagramm n mal zeichnen, wobei n die Anzahl der Datenpunkte ist - Sie haben eine for-Schleife in Ihrer drawRect und in Ihrer drawInContext-Methode.

Sie sollten kein Antialiasing einstellen, der Standard sollte Sie richtig sehen.

+0

Sie haben Recht, ich bin so f! @ # Beschämt. Ich zeichnete und zeichnete, deshalb sah es so schlecht aus. Das Entfernen der for-Schleife von drawRect hat es getan. – ferostar

Verwandte Themen