在 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
,例如UITapGestureRecognizer
或UIPanGestureRecognizer
。它应该使您更容易处理在不同时间发生的多次触摸和触摸的处理。还有其他可用的UIGestureRecognizer
s,您可能希望查看它们以获得您想要的行为。
【讨论】:
以上是关于在 iPhone 上跟踪多次触摸的主要内容,如果未能解决你的问题,请参考以下文章