2

次の方法で線を引いています。

- (void)drawLineWithColor:(UIColor *)color andRect: (CGRect)rect{

if (uploadButtonHidden == 2) {
    uploadPhotoButton.hidden = NO;
}

UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextTranslateCTM(context, 15, 110);

// set the stroke color and width
CGContextSetStrokeColorWithColor(context, [color CGColor]);
CGContextSetLineWidth(context, 6.0);

// move to your first point
CGContextMoveToPoint(context, 455, coords.y - 140);

// add a line to your second point
CGContextAddLineToPoint(context, coordsFinal.x, coordsFinal.y);

// tell the context to draw the stroked line
CGContextStrokePath(context);

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// Draw image on view
[image drawAtPoint:CGPointZero];
}

ご覧のとおり、coords.y は私の行の開始点を設定します。coords.y ポイントを変更してラインを更新する方法はありますか? たとえば、0.5 秒ごとに coords.y に 50 を追加するメソッドがある場合、(メモリ クラッシュを防ぐために) 再描画せずに行を更新するにはどうすればよいですか??

編集:

このメソッドは次のように呼び出されます。

UIGraphicsBeginImageContext(self.view.frame.size); 
[self drawLineWithColor:[UIColor   blackColor] andRect:CGRectMake(20, 30, 1476, 1965)]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
imageViewForArrows = [[UIImageView alloc] initWithImage:image];  
[imageArrowsArray addObject:imageViewForArrows];
4

1 に答える 1

2

画像に描画するのではなく、コンテキストに直接描画します。このメソッドはメソッド内から呼び出されると想定しています。drawRectその場合、すでに value が存在しますCGContextRef。あなたはそれを手に入れて引き込むだけです。変換またはクリッピングを適用するときは、必ずCGContextSaveGStateandを使用してください。CGContextRestoreGState

- (void)drawLineWithColor:(UIColor *)color andRect: (CGRect)rect{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);
    CGContextTranslateCTM(context, 15, 110);

    // set the stroke color and width
    CGContextSetStrokeColorWithColor(context, [color CGColor]);
    CGContextSetLineWidth(context, 6.0);

    // move to your first point
    CGContextMoveToPoint(context, 455, coords.y - 140);

    // add a line to your second point
    CGContextAddLineToPoint(context, coordsFinal.x, coordsFinal.y);

    // tell the context to draw the stroked line
    CGContextStrokePath(context);
    CGContextRestoreGState(context);
}
于 2013-02-14T17:03:27.930 に答える