touchesEnded不被称为?或随机被称为
如果我从第一次触摸中抬起手指,那么它会识别下一次触摸就好。只有当我持续第一次触摸,然后尝试用不同的手指同时触摸不同的区域时。然后它会错误地将第二次触摸注册为第一次触摸。touchesEnded不被称为?或随机被称为
更新它是与不被称为touchesEnded直到最后触摸已经结束(它不关心,如果您已经有其他5点触摸结束了,你终于让最后一个走之前...它称它们全部结束,一旦最后一次触碰结束)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch* touch = [touches anyObject];
NSString* filename = [listOfStuff objectAtIndex:[touch view].tag];
// do something with the filename now
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
ITouch* touch = [touches anyObject];
NSString* buttonPressed = [listOfStuff objectAtIndex:[touch view].tag];
// do something with this info now
}
无论出于何种原因,只有当触摸位于滚动视图内时,touchesEnded才会被延迟。如果你a)禁用滚动的滚动视图;或b)不使用滚动视图,然后touchesEnded立即交付。
我听说有些人拦截了sendEvent,但对我来说这似乎粗略,我真的不想搞砸响应者链,因为sendEvent处理了很多事件。
还有其他想法吗?有没有人有过UIWindow的子类,试图拦截这种方式?您可以提供的任何输入值得赞赏。
设置multipleTouchEnabled
。
在Interface Builder中,它是“启用用户交互”下的“多点触控”复选框。
tewha,你可能会在这里的正确轨道...我在代码中创建UIImageViews并在设置过程中设置MultipleTouchEnabled。出于某种原因,我不确定它的设置是否正确。我已经在其他地方看过,如果MultipleTouchEnabled没有设置为YES,那么touchesEnded将不会被调用,直到最后一次触摸结束(这完全匹配我的错误!)。 – iwasrobbed 2010-04-30 03:03:15
没关系,只是检查,所有已启用,并确保足够的可用性multipleTouchEnabled为YES是:( 它可能与所有的UIImageViews在滚动视图内有什么关系吗?在滚动视图之外他们做得很好,但在滚动视图内不会立即发送消息。 – iwasrobbed 2010-04-30 03:28:27
scrollview有一个属性delaysContentTouches
默认设置为YES
。它会延迟所有的触摸事件,直到它确定一个滚动手势。
我知道这个问题有点老,但我想我会分享我的经验,任何人在这个线程中绊倒寻找答案,就像我刚才一样。
我一直在努力解决这个问题几个小时,唯一能解决的问题就是删除我使用的任何UIGestureRecognizer对象。
对于我的设置,我使用平移和敲击识别器来捕捉这些手势,并使用touchesBegan和touchesEnded进行任何标准触摸事件。直到我移除UIGestureRecognizer对象时,touchesEnded方法才开始再次调用第二次触摸结束。具体来说,这是导致问题的泛认识者。
我不完全确定这是否适用于这种情况,但它解决了我遇到的问题。
今天我有这个,(或者更确切地说,我今天把这个问题抛在了我身上!)。
我看到发生的事情:
- 触摸屏,手指1起
- 的touchesBegan火灾
- 触摸屏,手指2起
- 的touchesBegan火灾
- 松开手指2
- 什么也没有发生
- 松开手指1
- touchesEnded火灾
- touchesEnded火灾
由于加文·克利夫顿说,如果你添加一个手势识别时才会发生。如果没有添加识别器,每次释放手指后touchesEnded都会触发。 如果我不需要使用识别器,那将会很棒...... !!!
我解决了这个通过添加gestureRotation.delaysTouchesEnded = FALSE;我识别创建/加入代码:
gestureRotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRotation_Callback:)];
[gestureRotation setDelegate:self];
gestureRotation.cancelsTouchesInView = FALSE;
gestureRotation.delaysTouchesEnded = FALSE; // <---- this line!!
[self.view addGestureRecognizer: gestureRotation];
[gestureRotation release];
现在的姿势工作,的touchesBegan不再排队!
我刚刚遇到了这个问题,其中一个touchesEnded
永远不会在ScrollView中的按钮上调用。根据Ovidiu的回答,我发现手动设置ScrollView的ContentOffset导致了问题。假设我设置contentOffset的方式让ScrollView混淆了我是否试图按下按钮或滚动视图。
让偏移量保持在0,0
使问题消失。
我找到了另一个选项。
经过touchesBegan
和CGPoint
未移动根据touchesMoved
,touchesCancelled
调用。
但是,如果CGPoint
更改根据touchesMoved
,touchesEnded
调用。
我创建了一个简单的测试项目,似乎touchesEnded在每次解除任何手指时都会被调用... – Vladimir 2010-04-29 08:11:01
Vladimir,你会介意在某处发布代码示例,以便我可以看到有什么不同吗?无论出于何种原因,我所有的touchesEnded都会在同一时间被调用,而不是实际发生的时间。 – iwasrobbed 2010-04-29 11:33:54
顺便说一句,在我的程序中,触及UIImageViews的滚动视图内的所有内容都在UIView如果这有什么区别 – iwasrobbed 2010-04-29 15:55:44