在不使用iPhone上的事件的情况下查询屏幕上的当前触摸次数

在不使用iPhone上的事件的情况下查询屏幕上的当前触摸次数,iphone,events,notifications,touchescancelled,Iphone,Events,Notifications,Touchescancelled,我有一个应用程序,当用户触摸uiview时会开始播放声音,当用户在屏幕上滑动手指时会切换到不同的音调。当用户抬起手指时,声音停止 我正在使用touchesbeated、Moved和Ended事件来进行此操作 我的问题是,触摸结束(和/或取消)有时没有正确触发,即使手指从屏幕上抬起,声音仍在播放 因此,作为一种解决方法,我想实现一个计时器,它将检查屏幕上的触摸次数,如果是零,它将检查并停止音频播放器播放 我一直在寻找一些代码,可以让我接触的次数像 UITouch*触摸=[self getAllTo

我有一个应用程序,当用户触摸uiview时会开始播放声音,当用户在屏幕上滑动手指时会切换到不同的音调。当用户抬起手指时,声音停止

我正在使用touchesbeated、Moved和Ended事件来进行此操作

我的问题是,触摸结束(和/或取消)有时没有正确触发,即使手指从屏幕上抬起,声音仍在播放

因此,作为一种解决方法,我想实现一个计时器,它将检查屏幕上的触摸次数,如果是零,它将检查并停止音频播放器播放

我一直在寻找一些代码,可以让我接触的次数像

UITouch*触摸=[self getAllTouchesonScreen]


或者说:)

触摸结束事件有时不会被触发

我曾尝试为取消的触球和结束的触球设置断点,但有时没有成功

尝试苹果网站上的GLPaint示例程序,在toches ended中尝试NSLog,在屏幕上快速绘制并快速抬起手指,就像把手指从屏幕上扔下来一样

你会明白我的意思的。我目前的解决方案涉及加速度计:)

提示:我使用它查找所有事件:(void)sendEvent:(UIEvent*)event

NSSet*alltouchs=[event alltouchs];
对于(GLuint索引=0;索引<[AllTouchs计数];++索引)
{
UITouch*touch=[[AllTouchs AllObject]对象索引:索引];
如果([触摸阶段]!=UITouchPhase取消)
{
CGPoint接触点=[touch locationInView:self];
//使用具有状态[接触阶段]的接触点执行某些操作
}
}

您可以在所有触摸事件功能(触摸开始、触摸结束、触摸移动)中使用此代码,您可以计算触摸次数并了解其状态。

不要忘记触摸取消。添加此功能/方法,并在触摸结束时记录它。我认为您会发现一些缺少的触摸

如果您正在寻找一个点击计数-在同一个地方多次点击,而不需要移动手指-您可以通过以下方式获得:

-(void)iPhoneTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint touchPosition = [touch locationInView:self];
lastTouchTime = [touch timestamp];
myTouchCount = [touch tapCount];

但我也会使用TouchsMoved手动执行此操作,以查看它移动了多远,如果任何点击移动过远,则取消双/三次点击的功能,并在有效点击状态下计算点击次数。

您所说的触摸结束是什么意思?您是否检查了代码,而不是猜测是框架造成的?触摸开始、移动和结束为您提供屏幕上所有触摸的NSSet*,因此您可以检查它是否与您的应用程序认为他们的触摸数匹配。。。
-(void)iPhoneTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint touchPosition = [touch locationInView:self];
lastTouchTime = [touch timestamp];
myTouchCount = [touch tapCount];