跟踪iPhone上的多个触摸

时间:2014-02-06 17:54:48

标签: ios iphone objective-c

我已经与多点触控'手指追踪'摔跤了几个星期了。我的背景是硬件和嵌入式系统编程,所以我对微控制器编程以外的任何东西都缺乏经验。我取得了一些成功,但只有当多个触摸同时开始和结束时。我的项目是音频硬件的手势控制界面,因此我需要跟踪每个触摸以生成自定义手势。

此示例显示了我如何从[触摸allObjects]中提取每个触摸以便单独处理它们(我排除了处理代码,这对于此示例来说是多余的)

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

touchesArray = [touches allObjects]; //Array Declared in header to hold multiple touches.

NSUInteger nNumTouches = [touchesArray count]; //Counts number of touches in Array
UITouch *touch = [touches anyObject];
CGPoint ptTouch;

for (int nTouch = 0;  nTouch < nNumTouches;  nTouch++)
{
    touch = [touchesArray objectAtIndex:nTouch];
    ptTouch = [touch locationInView:self.view];
{

是否有更有效的跟踪每次触摸的方法?我觉得我的编程知识已经结束了。特别是在尝试操纵NSMutable数组后无效。我也读过,但未能从这里执行细节:https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/multitouch_background/multitouch_background.html#//apple_ref/doc/uid/TP40009541-CH5-SW9

对此的回应看起来很有趣,但我无法让它在上下文中工作:

how to track multitouch events on iphone?

感谢您的时间,任何建议都将不胜感激,

汤姆。

3 个答案:

答案 0 :(得分:1)

接受的答案是正确的。但是,对于那些仍然没有弄清楚如何实现这个想法的人,请参阅我的回答here

基本概念是在调用touchesBegan::时将每个UITouch ID存储在一个数组中,然后将每个ID与touchesMoved::事件中屏幕上的触摸进行比较。这样,每个手指可以与单个对象配对,并在平移时跟踪。

答案 1 :(得分:0)

使用UIGestureRecognizerUITapGestureRecognizerUIPanGestureRecognizer。它应该使您更容易处理在不同时间发生的多次触摸和触摸的处理。还有其他UIGestureRecognizer可供您查看以获得所需的行为。

答案 2 :(得分:0)

他们的问题都需要同时触地/上移是因为[touches allObjects]在任何给定时间都没有给你一个屏幕上所有手指的数组,它给你与当前事件匹配的所有触摸的数组(向下/移动/结束/取消)。

如果您想在不使用任何gesturecognizers的情况下手动执行此操作,则可以通过访问event.allTouches获取所有触摸对象的完整数组。这将为您提供完整的阵列,您可以随时管理触摸的位置。