在 iPhone 上跟踪多次触摸

Posted

技术标签:

【中文标题】在 iPhone 上跟踪多次触摸【英文标题】:Tracking Multiple Touches on iPhone 【发布时间】:2014-02-06 17:54:48 【问题描述】:

几周以来,我一直在努力解决多点触控“手指跟踪”问题。我的背景是硬件和嵌入式系统编程,所以我对微控制器编程以外的任何东西都没有经验。我取得了一些成功,但只有当多个触摸同时开始和结束时。我的项目是音频硬件的手势控制界面,所以我需要跟踪每次触摸以产生自定义手势。

这个例子展示了我如何从 [touches 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?

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

汤姆。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您对它们都需要同时触地/向上的问题是由于[touches allObjects] 不会在任何给定时间为您提供屏幕上所有手指的数组,而是为您提供数组与当前事件匹配的所有触摸(向下/移动/结束/取消)。

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

【讨论】:

【参考方案3】:

使用UIGestureRecognizer,例如UITapGestureRecognizerUIPanGestureRecognizer。它应该使您更容易处理在不同时间发生的多次触摸和触摸的处理。还有其他可用的UIGestureRecognizers,您可能希望查看它们以获得您想要的行为。

【讨论】:

以上是关于在 iPhone 上跟踪多次触摸的主要内容,如果未能解决你的问题,请参考以下文章

在 iphone 上模拟触摸

iPhone - 在屏幕上绘图以响应触摸事件

在 iPad/iPhone 模拟器上模拟超过 2 次触摸

iPhone设备上的sencha触摸应用程序非常慢

iPhone 检测地图图像上的触摸

UITableView推送segue多次触发