-1

当用户单击屏幕上的任意位置时,我希望绘制一个圆圈。这段代码缺少什么/有什么问题?

- (void)drawRect:(CGRect)rect
{
if (UITouchPhaseBegan)
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(context, 0, 0, 225, 1);
    CGContextSetRGBFillColor(context, 0, 0, 255, 1);
    CGRect rectangle = CGRectMake(50, 50, 500, 500);
    CGContextStrokeEllipseInRect(context, rectangle);
}

}
4

1 回答 1

1

您的代码没有按照您的想法执行。看看UITouchPhaseBeganin的定义UITouch.h

typedef NS_ENUM(NSInteger, UITouchPhase) {
    UITouchPhaseBegan,             // whenever a finger touches the surface.
    UITouchPhaseMoved,             // whenever a finger moves on the surface.
    UITouchPhaseStationary,        // whenever a finger is touching the surface but hasn't moved since the previous event.
    UITouchPhaseEnded,             // whenever a finger leaves the surface.
    UITouchPhaseCancelled,         // whenever a touch doesn't end but we need to stop tracking (e.g. putting device to face)
};

它只是一个枚举值,而不是您的应用程序中正在发生的事情的反映。我相信在这种情况下,因为它是枚举中的第一个值,它可能被编译器设置为 0,因此总是评估为 false。

您可能想要做的是设置一个像BOOL _touchHasbegun;. 然后,在-touchesBegan:withEvent或您的手势识别器操作中,根据您进行触摸处理的方式,_touchHasBegun酌情设置为“是”或“否”。

当你知道你的视图需要更新时,调用[self setNeedsDisplay](或者[self setNeedsDisplayInRect:someRect]如果可以的话,为了更好的性能)来触发该-drawRect:方法。然后,让您的-drawRect:方法检查是否_touchHasBegun确定是否绘制圆圈。

注意:你永远不应该给-drawRect:自己打电话。您将视图设置为脏,操作系统会在正确的时间处理它。

于 2013-02-25T21:58:55.613 回答