如何在UIImageView上绘制线条而不是UIView?

时间:2012-10-22 09:28:46

标签: iphone ios uiimageview

如何在UIImageView上画一条线?我使用的是UIImageView子类,它不支持drawRect:方法。我想在图像视图上画一条线。我怎样才能做到这一点?请帮我。我在下面的代码中使用绘制线。

- (void)drawRect:(CGRect)rect {
    CGContextRef c = UIGraphicsGetCurrentContext();

    CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetStrokeColor(c, red);
    CGContextBeginPath(c);
    CGContextMoveToPoint(c, 5.0f, 5.0f);
    CGContextAddLineToPoint(c, 50.0f, 50.0f);
    CGContextStrokePath(c);
}

4 个答案:

答案 0 :(得分:5)

以下代码的工作原理是创建与原始图像大小相同的新图像,将原始图像的副本绘制到新图像上,然后在新图像的顶部绘制1像素线。

// UIImage *originalImage = <the image you want to add a line to>
// UIColor *lineColor = <the color of the line>

UIGraphicsBeginImageContext(originalImage.size);

// Pass 1: Draw the original image as the background
[originalImage drawAtPoint:CGPointMake(0,0)];

// Pass 2: Draw the line on top of original image
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 1.0);
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, originalImage.size.width, 0);
CGContextSetStrokeColorWithColor(context, [lineColor CGColor]);
CGContextStrokePath(context);

// Create new image
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

// Tidy up
UIGraphicsEndImageContext();

答案 1 :(得分:1)

首先,我不会使用UIImageView。事实上,文档说......

  

如果您的子类需要自定义绘图代码,建议您使用   UIView作为基类。

使用UIView

UIView添加UIImageView子视图并将图像放入其中。现在,您可以使用drawRect的{​​{1}}方法自定义绘图,它将显示在图像的顶部。

UIView

如果这不起作用,那么可能没有调用drawRect方法。设置断点来测试它。

答案 2 :(得分:1)

在我看来,最好的方法是采用与UIImageView相同大小的隐形UIView来绘制和实现UIView上的触摸方法以进行绘制。

你可以使用类似的东西:

CGPoint temp=[touch locationInView:self];

在以下方法中使用它:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

将所有点存储在数组中,然后按原样在UIImageView上绘制这些点。

答案 3 :(得分:0)

请参阅Muhammad Saad Ansari

使用Swift

func drawLines ( originalImage:UIImage, lineColor:CGColor ) -> UIImage{

UIGraphicsBeginImageContextWithOptions(originalImage.size,false,0.0)

originalImage.drawInRect(CGRectMake( 0, 0, originalImage.size.width, originalImage.size.height ))

let context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 5.0);
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, originalImage.size.width, 0);
CGContextSetStrokeColorWithColor(context,lineColor);
CGContextStrokePath(context);

// Create new image
var newImage = UIGraphicsGetImageFromCurrentImageContext();

// Tidy up
UIGraphicsEndImageContext();

return newImage

}