2017-01-24 6 views
-1

Ich versuche, die Sekunden einen Benutzer lang zu bekommen Drücken Sie eine Taste, ich habe dies versucht und kein Glück. In Swift 2 funktionierte es perfekt. Jetzt gebe ich eine lange Dezimalzahl.Erkennen von Zeitraffer in UILongPressGestureRecognizer in Swift 3

@IBOutlet weak var button: myButton! 

var longGesture = UILongPressGestureRecognizer(target: self, action: #selector(tapLong(_:))) 

myButton.addGestureRecognizer(longGesture) 


func tapLong(_ sender: AnyObject) { 

    var touchTime = 0.0 

    if sender is UILongPressGestureRecognizer { 

     if sender.state == UIGestureRecognizerState.began { 

      touchTime = CFAbsoluteTimeGetCurrent() 

     } else if sender.state == UIGestureRecognizerState.ended { 

      touchTime = CFAbsoluteTimeGetCurrent() - touchTime 

      print(touchTime) 


     } 
    } 
+0

ich tought, dass es offensichtlich war, dass myButton einen Ausgang hatte. – extrablade

Antwort

1

Da dies ein UIButton, würde ich empfehlen, @IBAction s mit und verbinden buttonDown(_:) zum TouchDown- Ereignis und verbinden buttonUp(_:) zu TouchUpInside und TouchUpOutside.

var startTime = Date() 

@IBAction func buttonDown(_ sender: UIButton) { 
    startTime = Date() 
} 

@IBAction func buttonUp(_ sender: UIButton) { 
    let endTime = Date() 
    let elapsed = endTime.timeIntervalSince(startTime) 
    print(elapsed) 
} 

die Aktionen zu verbinden, in dem Storyboard auf die Schaltfläche klicken und die Connections Inspector bringen und dann von den gewünschten Ereignissen ziehen, um den @IBAction s.

Connection an action in the Storyboard

+0

schätze die Hilfe, ich habe es verbunden, es ist nur, dass es mir keine Sekunden gibt, es gibt große Dezimalzahlen ... Ich bin nicht sicher, in welchem ​​Format es ist. – extrablade

+0

Der Wert ist ein "Double" und gibt Sekunden an. So wäre '1.50000120202030' nur etwas länger als 1 1/2 Sekunden. Wenn Sie ein Int wollen, verwenden Sie Int (verstrichen), um die Sekundenbruchteile wegzuwerfen. – vacawama