Могу ли я рисовать фигуры, такие как круг, прямоугольник, линия и т. Д. Вне метода drawRect

Могу ли я рисовать фигуры, такие как круг, прямоугольник, линия и т. Д. Снаружи drawRect метод с использованием

CGContextRef contextRef = UIGraphicsGetCurrentContext();

или это обязательно использовать внутри drawRect только. Пожалуйста, помогите мне, дайте мне знать, как я могу рисовать фигуры снаружи drawRect метод. На самом деле я хочу продолжать рисовать точки на touchesMoved событие.

Это мой код для рисования точки.

CGContextRef contextRef = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(contextRef, 0, 255, 0, 1);
CGContextFillEllipseInRect(contextRef, CGRectMake(theMovedPoint.x, theMovedPoint.y, 8, 8));

2 ответа

Решение

В основном вам нужен контекст, чтобы что-то нарисовать. Вы можете принять контекст в качестве белой книги. UIGraphicsGetCurrentContext вернусь null если вы не в правильном контексте. drawRect Вы получаете контекст представления.

Сказав это, вы можете рисовать снаружи drawRect Метод. Вы можете начать imageContext, чтобы нарисовать вещи и добавить его к вашему виду.

Посмотрите на приведенный ниже пример, взятый отсюда,

    - (UIImage *)imageByDrawingCircleOnImage:(UIImage *)image
{
    // begin a graphics context of sufficient size
    UIGraphicsBeginImageContext(image.size);

    // draw original image into the context
    [image drawAtPoint:CGPointZero];

    // get the context for CoreGraphics
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // set stroking color and draw circle
    [[UIColor redColor] setStroke];

    // make circle rect 5 px from border
    CGRect circleRect = CGRectMake(0, 0,
                image.size.width,
                image.size.height);
    circleRect = CGRectInset(circleRect, 5, 5);

    // draw circle
    CGContextStrokeEllipseInRect(ctx, circleRect);

    // make image out of bitmap context
    UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext();

    // free the context
    UIGraphicsEndImageContext();

    return retImage;
} 

Для Swift 4

func imageByDrawingCircle(on image: UIImage) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(CGSize(width: image.size.width, height: image.size.height), false, 0.0)

    // draw original image into the context
    image.draw(at: CGPoint.zero)

    // get the context for CoreGraphics
    let ctx = UIGraphicsGetCurrentContext()!

    // set stroking color and draw circle
    ctx.setStrokeColor(UIColor.red.cgColor)

    // make circle rect 5 px from border
    var circleRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
    circleRect = circleRect.insetBy(dx: 5, dy: 5)

    // draw circle
    ctx.strokeEllipse(in: circleRect)

    // make image out of bitmap context
    let retImage = UIGraphicsGetImageFromCurrentImageContext()!

    // free the context
    UIGraphicsEndImageContext()

    return retImage;
}
Другие вопросы по тегам