2016-09-07 1 views
0

J'ai besoin de mon NSButton pour répondre aux clics réguliers, ainsi qu'aux pressions longues. J'ajoute NSPressGestureRecognizer comme ceci:NSPressGestureRecognizer appelé avant 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") 
    } 

} 

Malheureusement, les feux handleLongPress au hasard, même à court clics simples ou doubles clics. Cela arrive même si je mets le minimumPressDuration à des valeurs plus élevées.

J'ai essayé de jouer avec le shouldBeRequiredToFailByGestureRecognizer mais cela ne résout pas le problème.

Y at-il quelque chose qui me manque avec mon code?

Répondre

0

J'ai résolu ce problème en gestion de plusieurs gestes: reconnaisseurs

la classe doit mettre en œuvre 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 

    } 
}