在 iphone 中使用 UITouch/UIView 的多点触控问题

Posted

技术标签:

【中文标题】在 iphone 中使用 UITouch/UIView 的多点触控问题【英文标题】:Multiple touch problem using UITouch/UIView in iphone 【发布时间】:2010-05-30 09:55:18 【问题描述】:

我正在尝试使用 iPhone 3G 和 SDK 3.1.2 在 UIView 上实现 2 指“捏”和“展开”(或放大)。我之前没有在 UITouch/UIEvent 中进行过编程,所以我很感激任何关于我所面临问题的指导。

当我用 2 根手指触摸屏幕时,我发现有时“touchesBegan”只会给我 1 个事件。我需要 UITouch 事件计数 == 2 来测量两根手指之间的距离。

因此我必须抬起手指并再次重复此过程,直到我的两个手指都被检测到。有办法吗?我可以改进它吗? 一旦检测到两个手指,实际调整大小就可以正常工作,但需要解决开始时看到的这个问题。

我知道 SDK 3.2 可以检测到捏合等手势,但我想知道在 3.1.2 中如何实现?

代码如下。即使我放下两根手指,“OnFingerDown”函数也会随机调用,而我希望每次都调用“onTwoFingersDown”。此外,每次我放下手指时,我只会得到 1 个触摸事件。我的意思是,如果“OnFingerDown”被调用了两次,我就能以某种方式让它工作。

提前致谢。感谢任何帮助。

约翰

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



     UITouch* touch, *touch1;
     CGPoint location, location1;
     if([[event allTouches] count] == 1) 

               touch=[UI[[event allTouches] allObjects] objectAtIndex:0];
               location=[touch locationInView:self];
               OnFingerDown(location);
     
     else if([[event allTouches] count] == 2) 

          touch=[[[event allTouches] allObjects] objectAtIndex:0];
          location=[touch locationInView:self];
          touch1=[[[event allTouches] allObjects] objectAtIndex:1];
          location1=[touch1 locationInView:self];

          OnTwoFingersDown(location, location1);

     


【问题讨论】:

【参考方案1】:

TouchesBegan 仅针对每个事件调用一次。两个同时触摸是一个事件。变量 NSSet* Touches 实际上是同时进行的一组触摸。你必须遍历它们来处理它们。

UIEvent *event 捆绑当前时刻对视图的所有触摸。包括 NSSet *Touches。

【讨论】:

以上是关于在 iphone 中使用 UITouch/UIView 的多点触控问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在iphone中录制屏幕[关闭]

如何使用编程在 iphone 中记录电话?

如何在 xcode 4.6.2 中使用 iphone 模拟器 5.1

使用 xmpp 在 iphone 中传输文件

在iPhone 4或iOS 5中可以直接使用Wifi吗?

如何在iphone中使用自动释放