0

私は線を引く必要があります.私は以下のコードを使用します.私の実際の必要性は、NSMutableArray

   - (void)drawLineGraph:(NSMutableArray *)lineGraphPoints
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextSetLineWidth(context, 1.0f);
    CGContextMoveToPoint(context, 10, 10);
    CGContextAddLineToPoint(context, 100, 50);
    CGContextStrokePath(context);
}

コンテキストを nil として受け取ります。次のエラーが表示されます

Aug  3 10:46:04 ABC-Mac-mini.local Sample[2077] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0
Aug  3 10:46:04 ABC-Mac-mini.local Sample[2077] <Error>: CGContextSetLineWidth: invalid context 0x0
Aug  3 10:46:04 ABC-Mac-mini.local Sample[2077] <Error>: CGContextMoveToPoint: invalid context 0x0
Aug  3 10:46:04 ABC-Mac-mini.local Sample[2077] <Error>: CGContextAddLineToPoint: invalid context 0x0
Aug  3 10:46:04 ABC-Mac-mini.local Sample[2077] <Error>: CGContextDrawPath: invalid context 0x0

配列lineGraphPointsには、プロットされるポイントがあります。折れ線グラフを描くのを手伝ってくれる人はいますか?

4

1 に答える 1

1

あなたが求めていることは、CGPoint 値の配列を列挙することで簡単に達成できます。また、必ず drawRect: メソッドをオーバーライドし、そこに描画コードを追加してください。ミュータブル配列で CGPoint 値を使用してグラフィックス コンテキストで線を作成する方法については、以下の例を参照してください。

- (void)drawRect:(CGRect)rect {
    NSMutableArray *pointArray = [[NSMutableArray alloc] initWithObjects:
    [NSValue valueWithCGPoint:CGPointMake(10, 10)],
    [NSValue valueWithCGPoint:CGPointMake(10, 10)],
    [NSValue valueWithCGPoint:CGPointMake(12, 16)],
    [NSValue valueWithCGPoint:CGPointMake(20, 22)],
    [NSValue valueWithCGPoint:CGPointMake(40, 100)], nil];

    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextSetLineWidth(context, 1.0f);

    for (NSValue *value in pointArray) {
    CGPoint point = [value CGPointValue];

        if ([pointArray indexOfObject:value] == 0) {
            CGContextMoveToPoint(context, point.x, point.y);
        } else {
            CGContextAddLineToPoint(context, point.x, point.y);
        }
    }

    CGContextStrokePath(context);
    [pointArray release];
}

drawRect メソッド内で可変配列をインスタンス化しましたが、ヘッダー ファイルでそのインスタンスを宣言し、好きな場所でインスタンス化してポイント値を追加することもできます。

于 2013-08-03T06:01:43.987 に答える