Objective-C:获取引发UIEvent的UITouch

3

我在文档中找不到相关信息。当这个消息在我的UIView子类中被调用时:

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

我该如何获取触发此消息的触摸?

在NSSet和UIEvent上,我只能获取一组触摸,但没有唯一标识符,因此无法确定哪个触摸触发了该消息。

PS:为什么他们要发送所有触摸的NSSet,并且还可以从[[event allTouches] anyObject]获取相同的集合。

1个回答

8
你无法获得“触摸”,因为有时会触发多个触摸消息。 如果用户在屏幕上放置了两个手指并移动两个手指,您可以在单个touchesMoved:withEvent:中获取更新的两个触摸。
您需要处理touches集中的每个触摸。 如果您已禁用视图的多点触控,以便您知道集合中只会有一个触摸,则可以使用touches.anyObject来获取触摸。 但是,如果您没有禁用多点触控,则需要循环遍历集合中的所有触摸。
消息包括与event.allTouches不同的一组触摸,因为用户可能有三个手指接触屏幕,但只移动了其中一个或两个手指。 touches集仅包含移动的触摸,但event.allTouches包含所有用户的触摸,包括自上次消息以来未移动的触摸。
触摸的唯一标识符是UITouch对象本身。 当用户在屏幕上放置手指时,iOS创建一个UITouch对象。 它会在用户移动手指时更新该对象。 因此,您可以将UITouch对象用作NSDictionary中的键,也可以使用objc_setAssociatedObject附加自己的对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接