target-c: нарисовать линию поверх UIImage или UIImageView - PullRequest
4 голосов
/ 02 августа 2011

Как нарисовать простую линию поверх UIImage или UIImageView?

Ответы [ 3 ]

14 голосов
/ 02 августа 2011

Следующий код работает, создавая новое изображение того же размера, что и оригинал, рисуя копию исходного изображения на новом изображении, затем рисуя линию в 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();

В качестве альтернативы , вы можете создать строку как CAShapeLayer, а затем добавить ее как подпредставление к UIImageView (см. этот ответ ).

0 голосов
/ 25 января 2017

для Swift 2.3

func drawLineOnImage(size: CGSize, image: UIImage, from: CGPoint, to: CGPoint) -> UIImage {
    UIGraphicsBeginImageContext(size)
    image.drawAtPoint(CGPointZero)
    let context     = UIGraphicsGetCurrentContext()
    CGContextSetLineWidth(context, 1.0)
    CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
    CGContextMoveToPoint(context, from.x, from.y)
    CGContextAddLineToPoint(context, to.x, to.y)
    CGContextStrokePath(context)

    let resultImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return resultImage
}
0 голосов
/ 01 декабря 2016

для Swift 3.0

    UIGraphicsBeginImageContext(originalImage.size)
    originalImage.draw(at: CGPoint(x: 0, y: 0))
    let context = UIGraphicsGetCurrentContext()!
    context.setLineWidth(2)
    context.move(to: CGPoint(x: 0, y: originalImage.size.height - 2))
    context.addLine(to: CGPoint(x: originalImage.size.width, y: originalImage.size.height - 2))
    context.setStrokeColor(UIColor.red.cgColor)
    context.strokePath()
    let finalImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...