使用石英单击时画一个圆圈

时间:2013-02-25 20:54:07

标签: objective-c cocoa-touch quartz-graphics

当用户点击屏幕上的任意位置时,我想要绘制一个圆圈。什么遗失/这个代码有问题?

- (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);
}

}

1 个答案:

答案 0 :(得分:1)

您的代码没有按照您的想法执行。请查看UITouchPhaseBeganUITouch.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;这样的ivar。然后,在-touchesBegan:withEvent或您的手势识别器操作中,根据您进行触摸处理的方式,将_touchHasBegun设置为YES或NO。否则。

如果您知道自己的观点需要更新,请致电[self setNeedsDisplay](如果可以,请[self setNeedsDisplayInRect:someRect],以获得更好的效果)以触发-drawRect:方法。然后,让-drawRect:方法检查_touchHasBegun是否确定是否绘制圆圈。

注意:您不应该自己致电-drawRect:。您将视图设置为脏,操作系统负责在适当的时间绘制它。