我正试图区分iPhone上的两个(或更多)UITouch对象。 具体来说,我想知道触摸发生的顺序。
例如,在我的-touchesBegan:withEvent:方法中,我得到了一个UITouch对象的NSSet。现在我可以找出有多少触摸,但是,哪个对象代表哪个手指?
我注意到UITouch上的时间戳属性 - 这就是我要找的东西吗?我知道如何获得最后一次或第一次触摸是有用的 - 提供触摸不会改变......
这就是我的问题。我可以使用时间戳来挑出最新的触摸,然后首先发生的触摸移动,IT成为最新的触摸......
在本练习结束时,我希望能够实现“捏”手势来放大或缩小等。
非常感谢任何帮助,谢谢。
答案 0 :(得分:24)
每个手指都会获得一个UITouch对象,并且会一次又一次地为您提供相同的对象。只需记住指向初始UITouch对象集的指针,并进行指针比较以跟踪手指。
来自Apple的参考文档:
触摸对象在序列中对于给定的手指是持久的,并且当UIKit在整个手指中跟踪手指时,UIKit会对其进行变异。更改的触摸属性是触摸的阶段,其在视图中的位置,其先前的位置以及其时间戳。事件处理代码评估这些属性以确定如何响应事件。
答案 1 :(得分:3)
我在这里有一些触摸示例代码:
http://github.com/kailoa/6tringle-touchsamplecode/tree/master http://6tringle.com/blog/2009/TouchSampleCode.html
这对某些人有用,我认为它可能会帮助你。
看看NSMutableArray *ActiveTouches
。这是我用来跟踪触摸发生顺序的集合。
在该代码库中有一个pinch和stretch的例子,使用该数组。
答案 2 :(得分:2)
经常讨论的解决方案是观察事件并比较当前的x和y以及之前的x和y值以匹配它们。似乎有一些技巧。事件可能会出现故障,而且我看到过硬件或操作系统看起来像许多(10)移动手指混淆的情况。
有些人指出触摸事件会被重复使用,您可以使用这个事实来跟踪哪个手指是哪个。我相信,StackOverflow至少已经覆盖了一次。
答案 3 :(得分:2)
我看了一下Kailoa Kadano的代码。你基本上保留了当前UITouch对象的NSMutableArray。但是UITouch的文档说明了这一点:
UITouch对象是持久的 整个多点触控序列。您 永远不应该保留UITouch对象 处理事件时如果你需要 保持关于触摸的信息 一个阶段到另一个阶段,你应该复制 来自UITouch的信息 对象
如果你在事件结束时再次发布它,我不太明白不保留它的原因,但这就是SDK doc所说的。
答案 4 :(得分:2)
我一直在寻找相同的信息。是的,似乎你不想保留UITouch数据。根据此处的“处理复杂多点触摸序列”部分 Apple Developer Documentation,跟踪多个触摸的“正确”方式是通过UITouch事件的指针值。
答案 5 :(得分:1)
对我给出的这些答案采取高峰可能有所帮助: