2013-07-16 82 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