2017-12-03 2 views
1

Ich möchte Doppelklick verwenden. Ich habe die Funktion doubleTap geschrieben. Wie erkenne ich den Finger?Wie Finger Position in Funktion zu erkennen

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    let doubleTap = UITapGestureRecognizer(target: self, action: "doubleTap") 
    doubleTap.numberOfTapsRequired = 2 
    doubleTap.numberOfTouchesRequired = 1 
    view.addGestureRecognizer(doubleTap) 
} 
func doubleTap() 
{ 

} 

Antwort

0

Sie können

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(doubleTapFunc)) 
    doubleTap.numberOfTapsRequired = 2 
    doubleTap.numberOfTouchesRequired = 1 
    view.addGestureRecognizer(doubleTap) 
} 

func doubleTapFunc(_ sender: UITapGestureRecognizer) 
{ 
    // Use 'sender' here to get the location 
    if sender.state == .ended { 
     // handling code 
     let location = sender.location(ofTouch: 0, in: self.view!) 
    } 
} 
+1

Verwenden Sie die '# Selektor'-Syntax. Das wird den Fehler mit dem ungültigen Selektor finden, den Sie gerade in Ihrem Code haben :) – Sulthan

+0

Fixed it, danke @Sultan – Yitzchak

+0

Ich kann Code nicht kompilieren. Das Argument '#selector' kann nicht auf die Variable 'doubleTap' verweisen – Vladislav

1

die Gestenerkenner als Parameter erhalten Sie location(ofTouch:in:) verwenden können, die Position der Verbindung zu setzen. Sie benötigen jedoch innerhalb der Funktion, in der Sie auf den Speicherort zugreifen möchten, Zugriff auf den Gestenerkenner. Daher sollten Sie doubleTap als Instanzeigenschaft Ihrer Klasse deklarieren.

class YourViewController: UIViewController { 
    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(YourViewController.doubleTap)) 

    override func viewDidLoad(){ 
     super.viewDidLoad() 
     doubleTap.numberOfTapsRequired = 2 
     doubleTap.numberOfTouchesRequired = 1 
     view.addGestureRecognizer(doubleTap) 
    } 
    func doubleTap(){ 
     let touchLocation = doubleTap.location(ofTouch: numberOfTouches-1,in: nil) 
    } 
} 

Ändern Sie die Eingabeparameter an die Funktion, wenn Sie ändern möchten, ob Sie das erste oder letzte Note Standort erhalten müssen oder wenn Sie wollen die Lage relativ zu einem Subview zu bekommen.

+0

Sie können auch den 'UIGestureRecognizer' als Parameter der Funktion' doubleTap' erhalten. Und Sie sollten die '# Selektor'-Syntax verwenden. – Sulthan

+0

@Sulthan hat meine Antwort aktualisiert, ich habe den OP-Code einfach kopiert, aber Sie haben Recht, ich hätte die Selector-Syntax korrigieren sollen. Für das Senden des Recognizers als Parameter ist das ebenfalls eine andere Möglichkeit. –

Verwandte Themen