2013-07-16 38 views
1

我有一个触摸操作,它是调整大小类型的场景的触发器,其中操作在触摸移动时开始,并且需要在touchesEnded上结束。事情是,touchesEnd可能在不同的UI视图上,因为用户正在拖动手指。如何注册一个*全球” touchesEnded听众?TouchUp Inside的全局事件处理程序

回答

5

你应该使用UIPanGestureRecognizer。每次触发,检查手势识别的state。如果是UIGestureRecognizerStateBegan则认为是第一个被感动,如果它是UIGestureRecognizerStateChanged,则用户正在移动他的手指,如果它是UIGestureRecognizerStateEnded那么用户已经抬起他的手指

只要手势开始在您的视图上,即使在离开视图边界之后,它仍将继续(除非取消)不需要担心“使其成为全局”

将手势识别器初始化为:

UIPanGestureRecognizer *dragViewGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleDragView:)]; 
dragViewGestureRecognizer.maximumNumberOfTouches = 1; 
[yourView addGestureRecognizer:dragViewGestureRecognizer]; 

然后填写以下方法与您需要的代码:

- (void)handleDragView:(UIPanGestureRecognizer*)panGestureRecognizer { 
    switch (panGestureRecognizer.state) { 
     case UIGestureRecognizerStateBegan: { 
      //Code when dragging starts 
      break; 
     } case UIGestureRecognizerStateChanged: { 
      //Code while dragging is happening (if needed) 
      break; 
     } case UIGestureRecognizerStateEnded: { 
      //Code when dragging ends 
      break; 
     } 
     default: 
      break; 
    } 
} 
+0

这是伟大的!我如何获得手指当前所在的UIView? – user2453876

+0

只有当您将手势处理程序添加到(上述代码中的“yourView”)时,才会触发初始触摸“捕获”该事件。如果在多个视图中有多个手势控制器访问同一方法,则可以通过从'handleDragView:'方法内访问'panGestureRecognizer.view'来获取触发事件的视图。 – Ander