touchesMoved处理第一个触摸事件iOS

时间:2012-05-25 14:00:36

标签: ios touchesmoved

我正在使用此方法在视图中移动对象:

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

我在下面写了这个方法:

NSLog(@"event: %@", event);

得到这个结果:

event: <UITouchesEvent: 0x310d00> timestamp: 5277.16 touches: {(
    <UITouch: 0x3f1110> phase: Moved tap count: 1 window: <UIWindow: 0x3117d0; frame = (0 0; 768 1024); layer = <UIWindowLayer: 0x30cb20>> view: <UIView: 0x330520; frame = (0 0; 768 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x330550>> location in window: {279, 677} previous location in window: {305, 694} location in view: {347, 279} previous location in view: {330, 305},
    <UITouch: 0x4a1a710> phase: Stationary tap count: 1 window: <UIWindow: 0x3117d0; frame = (0 0; 768 1024); layer = <UIWindowLayer: 0x30cb20>> view: (null) location in window: {412, 89} previous location in window: {413, 89} location in view: {412, 89} previous location in view: {413, 89}
)}

在这个日志里,我可以看到我的所有触摸(现在这是两次触摸)。

我的问题是如何获取触摸?

这需要移动我的对象。

现在我正在使用它:

UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self.view];

但是当我移动我的物体时,我得到所有触摸值。如何处理第一次触摸?

非常感谢!

2 个答案:

答案 0 :(得分:4)

你这样做的方式没有错,但如果你真的想知道,如何获得第一个对象,就在这里。

参数触摸属于NSSet类型。如果您查看NSSet Class Reference,还可以找到方法- (NSArray *)allObjects

所以你可以通过以下方式检索第一次触摸:

UITouch *touch = (UITouch *)[[[event allTouches] allObjects] objectAtIndex: 0];

另请查看UIEvent Class Reference。在那里你会发现allTouches并不是唯一的方法。班级也知道如何返回:

- (NSSet *)touchesForGestureRecognizer:(UIGestureRecognizer *)gesture

- (NSSet *)touchesForView:(UIView *)view

- (NSSet *)touchesForWindow:(UIWindow *)window

所有这些方法都返回NSSet。您可以使用NSArray的{​​{1}}方法将转换转换为NSSet

答案 1 :(得分:3)

如果您使用触摸事件拖动视图,则可以使用UIPanGestureRecognizer。

识别器具有最小/最大触摸次数等属性,Apple完全用于拖动视图。

UIPanGestureRecognizer Class reference