1
我有一個觸摸操作,它是調整大小類型的場景的觸發器,其中操作在觸摸移動時開始,並且需要在touchesEnded上結束。事情是,touchesEnd可能在不同的UI視圖上,因爲用戶正在拖動手指。如何註冊一個*全球」 touchesEnded聽衆?TouchUp Inside的全局事件處理程序
我有一個觸摸操作,它是調整大小類型的場景的觸發器,其中操作在觸摸移動時開始,並且需要在touchesEnded上結束。事情是,touchesEnd可能在不同的UI視圖上,因爲用戶正在拖動手指。如何註冊一個*全球」 touchesEnded聽衆?TouchUp Inside的全局事件處理程序
你應該使用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;
}
}
這是偉大的!我如何獲得手指當前所在的UIView? – user2453876
只有當您將手勢處理程序添加到(上述代碼中的「yourView」)時,纔會觸發初始觸摸「捕獲」該事件。如果在多個視圖中有多個手勢控制器訪問同一方法,則可以通過從'handleDragView:'方法內訪問'panGestureRecognizer.view'來獲取觸發事件的視圖。 – Ander