2012-04-02 7 views
1

私は、tutorialに続いてQuartzでグラフを作成しています。クォーツで滑らかな線を描くグラフ

これは私のハードコーディングされたクラスです。

#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

ラインの幅は、0.2ではなく2.0でなければなりません。それはあなたに細かいラインを描くのに苦労します。

また、グラフをn回描画しているように見えます。ここで、nはデータポイントの数です。drawRectとdrawInContextメソッドにforループがあります。

アンチエイリアスを設定する必要はありません。デフォルトでは、正しく表示されます。

+0

あなたは正しいです、私はとてもf!@#恥ずかしいです。私は描画して再描画していたので、それはとても悪く見えました。 drawRectからforループを削除すると、それが実行されました。 – ferostar

関連する問題