2016-02-20 137 views
0

我用長按手勢識別器來設置我自己的wkwebview鏈接操作表,但是直到我釋放我的手指纔會出現動作表(我試過recognizer.began但它沒有工作...)快速攔截(或強制停止)長按手勢識別器

那麼,我怎樣才能攔截長按識別器?我可以添加一個計時器來阻止它嗎?怎麼樣?

P.s.這裏是我的代碼:

//long press to show the action sheet 
     longPressRecognizer.delegate = self 
     longPressRecognizer.addTarget(self, action: "onLongPress:") 
     self.webView.scrollView.addGestureRecognizer(longPressRecognizer) 

func onLongPress(gestureRecognizer:UIGestureRecognizer){ 
     longPressSwitch = true 
    } 

回答

0

而不是長按識別器,使用NSTimer。這裏有一個快速實施的例子(Swift 2):

var sameTouch = false 
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    _ = NSTimer.scheduledTimerWithTimeInterval(1.5, target: self, selector: "longPressed", userInfo: nil, repeats: false) 
    sameTouch = true 
} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    sameTouch = false 
} 

func longPressed() { 
    if(sameTouch) { 
     longPressSwitch = true 
     sameTouch = false 
    } 
} 

很簡單的東西;當「觸摸開始」時,我們啓動計時器,運行時間爲1.5秒。我們說_ = ...,因爲我們永遠不會再引用那個定時器,所以命名它是不必要的。我們還將變量sameTouch設置爲true。

如果touchesEnded,我們將sameTouch設置爲false。這是因爲這會指示longPressed()觸摸已經提前釋放。

longPressed()中,我們將longPressSwitch設置爲true - 這是來自您的代碼。該行,sameTouch = false不是100%必要的,但它說明了我眼中系統的關閉。

希望,這有助於!如果您有問題,請告訴我!

+0

不起作用,因爲Wkwebview無法識別touchesBegan&touchesEnded事件......這就是爲什麼我使用UIGestureRecognizer。 –

+0

@JasonHoncheungWong,你使用的是UIWebView還是UIWebViewController? – Dopapp

+0

我用WKWebView代替UIWebView ...仍然在努力解決這個問題......或者有沒有什麼方法可以向手勢識別器發送TouchUpInside事件(使假手指釋放信號)? –