Могу ли я рисовать фигуры, такие как круг, прямоугольник, линия и т. Д. Вне метода 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;
}