0

如何在 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

4 回答 4

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();
于 2013-07-10T07:28:44.463 回答
1

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

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

使用UIView.

UIView添加一个UIImageView子视图并将图像放在那里。现在您可以使用 的drawRect方法进行自定义绘图,UIView它将出现在图像的顶部。

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);

    CGContextSetLineWidth(context, 5.0);

    CGContextStrokeRect(context, self.bounds);
}

如果这不起作用,则可能不会调用 drawRect 方法。设置一个断点来测试它。

于 2012-10-22T09:33:01.497 回答
1

在我看来,最好的方法是采用与 UIImageView 相同大小的不可见 UIView 进行绘图,并在 UIView 上实现触摸方法进行绘图。

你可以使用类似的东西:

CGPoint temp=[touch locationInView:self];

在以下方法中使用它:

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

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

于 2012-10-22T09:58:22.133 回答
0

请参阅穆罕默德·萨阿德·安萨里

使用斯威夫特

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

}

于 2015-03-19T07:33:19.533 回答