使用CoreGraphics动态绘制一条线

时间:2013-02-14 16:25:38

标签: ios xcode

我正在使用以下方法绘制一条线:

- (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];

1 个答案:

答案 0 :(得分:2)

不要绘制成图像,而是直接绘制到上下文中。我假设从drawRect方法中调用此方法,在这种情况下,已经存在值CGContextRef。你只需要得到它并吸引它。应用变换或剪裁时,请务必使用CGContextSaveGStateCGContextRestoreGState

- (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);
}