在核心图形中绘制圆圈 - 为什么这不起作用?

时间:2011-07-23 15:29:28

标签: iphone objective-c ios core-graphics

我正在尝试创建一个简单的绘图应用程序,无论你把手指放在哪里都能创建圆圈,这就是我所拥有的:

@synthesize touchPos;
@synthesize coords;


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    touchPos = [touch locationInView:self.view];
    coords.text = [NSString stringWithFormat:@"%3.0f, %3.0f", touchPos.x, touchPos.y];
    [self setNeedsDisplay];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self touchesBegan:touches withEvent:event];
}

- (void)drawRect:(CGRect)rect
{
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(contextRef, 2.0);
    CGContextSetRGBFillColor(contextRef, 0, 0, 1.0, 1.0);
    CGContextSetRGBStrokeColor(contextRef, 0, 0, 1.0, 1.0);
    CGRect circlePoint = (CGRectMake(touchPos.x, touchPos.y, 10.0, 10.0));

    CGContextFillEllipseInRect(contextRef, circlePoint);
}

我没有得到任何错误或警告,它只是没有画任何东西。此外,文本框显示我正在触摸的坐标,所以我知道这不是问题。

3 个答案:

答案 0 :(得分:3)

此代码需要位于UIView子类中,该子类是当前视图层次结构的一部分。

答案 1 :(得分:1)

您是否调用addSubview将其添加到主视图? 您是否为此视图调用了setNeedsDisplay?

另见this SO question

确保框架正确并位于父视图的边界内。

答案 2 :(得分:0)

问题是-drawRect:没有被调用,因为,这是正确的,你在UIViewController中编写这段代码。您需要创建UIView的子类并将所有这些绘图和事件处理移动到它。您需要更改的唯一内容是self.view,因为在UIView的子类中,您只需要说self。拥有自定义UIView子类后,您可以使用界面构建器将UIViewController的类设置为自定义类。