2016-09-07 7 views
0

私はNSButtonが必要で、通常のクリックだけでなく長押しにも対応します。私はそうのようなNSPressGestureRecognizerを追加してい:NSPressGestureRecognizer before leastPressDuration

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 

    } 
}