How to draw line on the UIImageView not for UIView

2019-06-10 07:21发布

How to draw a line on the UIImageView? I am using the UIImageView Sub Class, Its not support drawRect: method. I want to draw a line on the image view. How can I do this? Please help me. I am using below code for draw line.

- (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条回答
女痞
2楼-- · 2019-06-10 07:40

Refer to Muhammad Saad Ansari

With 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

}

查看更多
一夜七次
3楼-- · 2019-06-10 07:44

First, I wouldn't use a UIImageView. In fact the docs say...

If your subclass needs custom drawing code, it is recommended you use UIView as the base class.

Use a UIView.

In the UIView add a UIImageView subView and put the image in there. Now you can do you custom drawing in the drawRect method of the UIView and it will appear on top of the image.

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

    CGContextSetLineWidth(context, 5.0);

    CGContextStrokeRect(context, self.bounds);
}

If this isn't working then the drawRect method probably isn't being called. Set a breakpoint to test it.

查看更多
我想做一个坏孩纸
4楼-- · 2019-06-10 07:45

The following code works by creating a new image the same size as the original, drawing a copy of the original image onto the new image, then drawing a 1 pixel line along to the top of the new image.

// 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();
查看更多
萌系小妹纸
5楼-- · 2019-06-10 07:53

The best way to go about it in my opinion would be to take a invisible UIView of the same size as UIImageView for drawing and implement the touch methods on the UIView for drawing.

you can use something like:

CGPoint temp=[touch locationInView:self];

Use this in methods like:

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

Store all the points in an array and then draw those points on the UIImageView as it is.

查看更多
登录 后发表回答