您的代码没有按照您的想法执行。看看UITouchPhaseBegan
in的定义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:
自己打电话。您将视图设置为脏,操作系统会在正确的时间处理它。