如何在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);
}
答案 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)
使用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
}