当用户点击屏幕上的任意位置时,我想要绘制一个圆圈。什么遗失/这个代码有问题?
- (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);
}
}
答案 0 :(得分:1)
您的代码没有按照您的想法执行。请查看UITouchPhaseBegan
中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;
这样的ivar。然后,在-touchesBegan:withEvent
或您的手势识别器操作中,根据您进行触摸处理的方式,将_touchHasBegun
设置为YES或NO。否则。
如果您知道自己的观点需要更新,请致电[self setNeedsDisplay]
(如果可以,请[self setNeedsDisplayInRect:someRect]
,以获得更好的效果)以触发-drawRect:
方法。然后,让-drawRect:
方法检查_touchHasBegun
是否确定是否绘制圆圈。
注意:您不应该自己致电-drawRect:
。您将视图设置为脏,操作系统负责在适当的时间绘制它。