每次使用Core Graphics绘制圆圈时,如何防止我的视图被清除?

时间:2010-06-21 17:34:52

标签: iphone ipad

我正在iPad上进行2D图形编程,我想在用户触摸屏幕的地方绘制圆圈。这是我完成此操作的简单代码......

查看课程

-(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. 如何阻止先前的圈子被清除?
  3. 我尝试将self.clearsContextBeforerDrawing属性设置为NO,但这并没有解决它。

    非常感谢您提供所有帮助!

1 个答案:

答案 0 :(得分:1)

您可以在单独的图层上绘制圆圈,而在drawRect中只需复制它。

有关详细信息,请参阅CGLayerCreateWithContext,CGLayerGetContext,CGContextDrawLayerInRect函数。