3

我在文档中找不到任何地方。当在我的 UIView 子类上调用此消息时:

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

如何获得调用此消息的联系方式?

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

PS:为什么他们会发送所有触摸的NSSet,以及从那里获得相同集合的可能性[[event allTouches] anyObject]

4

1 回答 1

8

您无法触摸,因为有时多次触摸会触发消息如果用户在屏幕上有两根手指,并且都移动了,那么您可以获得一个touchesMoved:withEvent:同时更新两个触摸的单指。

您需要处理touches集合中的每一次触摸。如果您为视图禁用了多点触控,这样您就知道集合中只会有一次触控,您可以使用touches.anyObject来获取触控。但如果您没有禁用多点触控,则需要循环遍历集合中的所有触控。

该消息包括一组单独的触摸,event.allTouches因为用户可能有三个手指向下但只移动其中一个或两个。该touches集合仅包含移动的触摸,但event.allTouches包含用户的所有触摸,包括自上一条消息以来未移动的触摸。

触摸的唯一标识符是UITouch对象本身。当用户将手指放在屏幕上时,iOS 会创建一个UITouch对象。当用户移动他的手指时,它会更新该对象。因此,您可以将UITouch对象用作 中的键NSDictionary,或者您可以使用 . 将自己的对象附加到它objc_setAssociatedObject

于 2012-04-12T17:28:30.623 回答