我已经与多点触控'手指追踪'摔跤了几个星期了。我的背景是硬件和嵌入式系统编程,所以我对微控制器编程以外的任何东西都缺乏经验。我取得了一些成功,但只有当多个触摸同时开始和结束时。我的项目是音频硬件的手势控制界面,因此我需要跟踪每个触摸以生成自定义手势。
此示例显示了我如何从[触摸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?
感谢您的时间,任何建议都将不胜感激,
汤姆。
答案 0 :(得分:1)
接受的答案是正确的。但是,对于那些仍然没有弄清楚如何实现这个想法的人,请参阅我的回答here。
基本概念是在调用touchesBegan::
时将每个UITouch ID存储在一个数组中,然后将每个ID与touchesMoved::
事件中屏幕上的触摸进行比较。这样,每个手指可以与单个对象配对,并在平移时跟踪。
答案 1 :(得分:0)
使用UIGestureRecognizer
或UITapGestureRecognizer
等UIPanGestureRecognizer
。它应该使您更容易处理在不同时间发生的多次触摸和触摸的处理。还有其他UIGestureRecognizer
可供您查看以获得所需的行为。
答案 2 :(得分:0)
他们的问题都需要同时触地/上移是因为[touches allObjects]
在任何给定时间都没有给你一个屏幕上所有手指的数组,它给你与当前事件匹配的所有触摸的数组(向下/移动/结束/取消)。
如果您想在不使用任何gesturecognizers
的情况下手动执行此操作,则可以通过访问event.allTouches
获取所有触摸对象的完整数组。这将为您提供完整的阵列,您可以随时管理触摸的位置。