Как предотвратить очистку моего вида каждый раз, когда я рисую круг с помощью Core Graphics? - PullRequest
0 голосов
/ 21 июня 2010

Я погружаюсь в программирование 2D-графики на iPad и хочу рисовать круги там, где пользователь касался экрана.Вот мой простой код для выполнения этого ...

Класс просмотра

-(void)setTouchPoint:(CGPoint)point
{
 touchPoint.x = point.x;
 touchPoint.y = point.y;

 [self setNeedsDisplay];
}

-(id)initWithFrame:(CGRect)frame
{
 self = [super initWithFrame:frame];
 if(self != nil)
 {
  self.backgroundColor = [UIColor whiteColor];
  self.opaque = YES;
  self.clearsContextBeforeDrawing = YES;
 }
 return self;
}



-(void)drawInContext:(CGContextRef)context
{
 // Drawing with a white stroke color
 CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
 // And draw with a blue fill color
 CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);
 // Draw them with a 2.0 stroke width so they are a bit more visible.
 CGContextSetLineWidth(context, 2.0);

 // Add an ellipse circumscribed in the given rect to the current path, then stroke it
 CGContextAddEllipseInRect(context, CGRectMake(touchPoint.x - 10, touchPoint.y - 10, 20, 20));
 CGContextStrokePath(context);

}

-(void)drawRect:(CGRect)rect
{
 [self drawInContext:UIGraphicsGetCurrentContext()];
}

Каждый раз, когда пользователь касается экрана, представление очищается, вызывая предыдущий кругстереть, и новый круг рисуется там, где пользователь коснулся.

  1. Почему это происходит?
  2. Как предотвратить удаление предыдущих кругов?

Я пытался установить для свойства self.clearsContextBeforerDrawing значение NO, но это не помогло.

Большое спасибо заранее за вашу помощь!

1 Ответ

1 голос
/ 21 июня 2010

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

Подробнее см. CGLayerCreateWithContext, CGLayerGetContext, CGContextDrawLayerInRect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...