所有方法都在UIViewController子类上实现.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"Touches Began"); [self logTouchesFor: event]; [super touchesEnded: touches withEvent: event]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"Touches Moved"); [self logTouchesFor: event]; [super touchesEnded: touches withEvent: event]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"Touches Ended"); [self logTouchesFor: event]; [super touchesEnded: touches withEvent: event]; } -(void)logTouchesFor:(UIEvent *)event { int count = 1; for (UITouch *touch in event.allTouches) { CGPoint location = [touch locationInView: self.view]; NSLog(@"%d: (%.0f,%.0f)",count,location.x,location.y); count++; } }
现在有趣的结果…
单触摸按预期工作
假设我用拇指触摸屏幕.我在输出窗口中看到touchesBegan已经被调用了.我移动我的拇指,并触摸已被调用.然后我把我的拇指从屏幕上拉出来,然后触摸已被调用.所有这一切都是如预期的那样,我将它作为一个控制案例包含在这个问题中 – 只要清楚我的视图控制器正在接收触摸事件,并且我没有错过任何地方的vc.view.userInteractionEnabled = YES.
第二次触摸不会触发触发,触摸已触发或触摸已被调用
这是最有趣的一个.假设我用拇指触摸屏幕(touchesBegan被调用),并将其保持在屏幕上.然后我用食指触摸屏幕上的其他地方,同时把拇指放在同一个地方. TouchesBegan不叫.然后让我说,我把食指放在绝对静止的位置(这可能是棘手的,但这是可能的).接触不被调用.然后,我把食指从屏幕上拉出来. TouchesEnded不被调用.最后,我移动我的拇指和触摸被调用.然后我把我的拇指从屏幕上拉出来,并且触摸已被调用.
只是为了清楚:我在viewDidLoad方法中设置self.view.multipleTouchEnabled = YES.
有关第二触摸的信息可用,提供第一触摸移动
这一次我做了非常类似于上面的例子.我用拇指触摸屏幕,然后用食指,同时保持我的拇指静止.当我的拇指击中屏幕,而不是我的食指时,TouchesBegan被调用.现在我移动我的拇指,触摸被调用.不仅如此,但事件中有两个触动.allTouches数组(是的,第二个触摸是我期望的地方).这意味着系统意识到我已经触摸屏幕第二次,但我没有通过我的视图控制器上的触摸处理方法被通知.
如何通知第二次触摸的变化?
我真的希望能够响应第二次触摸的位置或状态的变化,而不是当第一次触摸也发生变化时.很多时候这不会是一个问题,因为很难改变一触而不影响对方,但我至少有一种情况可能是一个问题.我错过了什么吗?有没有人注意到这种行为或有问题吗?
如果是相关的,我使用的是运行iOS 5.1的iPhone 3GS.