我正在使用此方法在视图中移动对象:
- (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];
但是当我移动我的物体时,我得到所有触摸值。如何处理第一次触摸?
非常感谢!
答案 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完全用于拖动视图。