2012-04-12 54 views
3

我无法在文档中找到任何地方。当这个消息被称为我的UIView的子类:Objective-C:获取UIEvent触发的UITouch

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

我怎样才能得到它被称为该消息的联系吗?

对于NSSet和UIEvent,我只能获取触摸集,但没有唯一标识符,因此我可以确定哪个触摸触发了该消息。

PS:为什么地狱,他们会派一个NSSet中的所有触摸,也可能从[[event allTouches] anyObject]

回答

8

获得同样的你不能得到触摸,因为有时多点触摸触发消息。如果用户在屏幕上有两个手指并移动两个手指,则可以获得单个触摸更新的单个touchesMoved:withEvent:

您需要处理touches集合中的每个触摸。如果您已禁用视图的多点触控,以便您知道该设置中只有一次触摸,则可以使用touches.anyObject进行触摸。但是,如果您尚未禁用多点触控,则需要循环播放全部触控。

该消息包含一组与event.allTouches分开的触摸,因为用户可能有三个手指向下,但只能移动一个或两个手指。 touches集只包含移动的触摸,但event.allTouches包含用户的所有触摸,包括自上次消息以来尚未移动的触摸。

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

+0

哇!感谢您的详细解答。现在这一切都很有意义:) – 2012-04-13 06:47:33