2016-09-07 140 views
0

我需要我的NSButton來響應常規點擊以及長按。我加入NSPressGestureRecognizer像這樣:NSPressGestureRecognizer在minimumPressDuration之前調用

override func viewDidLoad() { 
    super.viewDidLoad() 

    let gr = NSPressGestureRecognizer() 
    gr.minimumPressDuration = 1 
    gr.action = #selector(handleLongPress) 
    button.addGestureRecognizer(gr) 
} 

func handleLongPress(gr: NSPressGestureRecognizer) { 

    if gr.state == .Began { 
     Swift.print("long press") 
    } 

} 

不幸的是,handleLongPress隨機即使在短單次點擊,或者雙擊火災。即使我將minimumPressDuration設置爲更高的值,也會發生這種情況。

我試過玩shouldBeRequiredToFailByGestureRecognizer但它沒有解決問題。

有沒有我缺少我的代碼?

回答

0

我已經處理多個手勢識別解決了這個:

的類必須實現NSGestureRecognizerDelegate

var singleClick:NSClickGestureRecognizer? 
var longClick:NSPressGestureRecognizer? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    longClick = NSPressGestureRecognizer() 
    longClick!.minimumPressDuration = 1 
    longClick!.action = #selector(handleGestureLong) 
    longClick!.delegate = self 

    singleClick = NSClickGestureRecognizer() 
    singleClick?.numberOfClicksRequired = 1 
    singleClick!.action = #selector(handleGestureSingle) 
    singleClick!.delegate = self 

    btn.addGestureRecognizer(longClick!) 
    btn.addGestureRecognizer(singleClick!) 

} 

func gestureRecognizer(gestureRecognizer: NSGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: NSGestureRecognizer) -> Bool { 
    if gestureRecognizer == singleClick && otherGestureRecognizer == longClick { 
     return false 
    } 
    return true 
} 

func handleGestureSingle(gr: NSClickGestureRecognizer) { 

    switch gr.state { 

    case .Ended: 
     print("single click") 
     break 
    default: 
     break 

    } 
} 

func handleGestureLong(gr: NSPressGestureRecognizer) { 

    switch gr.state { 

    case .Began: 
     print("long click") 
     break 
    default: 
     break 

    } 
} 
相關問題