【问题标题】:Iphone multitouch handlingiPhone多点触控处理
【发布时间】:2010-10-31 06:59:06
【问题描述】:
我正在编写一个 iPhone 应用程序,我想处理多点触控。我正在使用 cocos2d 库。所以我创建了一个CCLayer 子类并将其设置为CCStandartTouchDelegate。出于某种原因,我不想使用 UIGestureRecognizer 并构建正确的逻辑,我应该知道这些问题的答案:
如果我用一根手指点击屏幕,然后用另一根手指点击屏幕。 ccTouchesBegan 会捕获多少次触摸?
如果我用两根手指点击屏幕,然后只会移动其中一根。 ccTouchesMoved 会捕获多少次触摸?
【问题讨论】:
标签:
iphone
objective-c
cocos2d-iphone
multi-touch
【解决方案1】:
当你有这样的问题时,最好的办法就是实现回调,并在实现中记录参数。例如:
- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// Log everything (there will be repetition because the event contains the set of touches):
NSLog(@"ccTouchesBegan: touches = %@; event = %@", touches, event);
// Or, just log the number of touches to simplify the output:
NSLog(@"ccTouchesBegan: %d touches", [touches count]);
return kEventHandled;
}
然后运行您的应用并进行实验,并查看日志。通过这种方式,您将比在此处提问了解更多(而且速度更快)。
但要回答您的具体问题:
您应该在每次点击时调用 ccTouchesBegan(即使第二次点击时第一根手指仍然向下)。如果两根手指同时敲击,两指即接电话。
每次一个或多个手指移动时,您都会收到对 ccTouchesMoved 的重复调用。如果只有一根手指在移动,则每次调用都将通过一次触摸。静止的手指在移动或抬起之前不会生成事件。
当然,记得为你的 CCLayer 设置isTouchEnabled = YES,否则你根本不会收到任何回调。