2016-08-07 5 views
4

Bei Verwendung von UIRotationGestureRecognizer wird die Drehung erkannt, aber die Aktion wird mehrmals ausgelöst. Hier ist mein Code:UIRotationGestureRecognizer wird mehrfach aktiviert Swift

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    let rotation = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.lol)) 
    self.view.addGestureRecognizer(rotation) 
} 

func lol() { 
    print ("hi") 
    UIView.animateWithDuration(5.0, animations: { 
     let currTransform = self.view.transform 
     let newTransform = CGAffineTransformConcat(currTransform, CGAffineTransformMakeRotation(CGFloat(M_PI))) 
     self.view.transform = newTransform 

    }) 
} 

Antwort

2

Überprüfen Sie den Status von UIRotationGestureRecognizer.

let rotation = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.lol(_:))) 

func lol(sender: UIRotationGestureRecognizer) { 
    print(sender.state) 

Ich erwarte, dass Sie Began und End Staaten nur zu empfangen.

1

UIRotationGestureRecognizer löst seine zugewiesene Aktion so oft aus, wie eine Benachrichtigung empfangen wird, dass eine Mehrfach-Finger-Touch-Geste ausgeführt wurde. Es wird erwartet, dass

lol() 

wird mehrmals aufgerufen werden.

Ich nehme an, Sie möchten die Ansicht drehen, während der Benutzer eine Pinch-Geste auf das Ansichtsobjekt verwendet. In diesem Fall sollten Sie anstelle von UIView.animateWithDuration (in dem Sie eine Dauer manuell festlegen müssen) auf die .rotation -Eigenschaft der UIROTationGestureRecognizer-Instanz achten, die den neuesten Rotationswert des Gestenerkenners in Radiant.

Anschließend können Sie diese Eigenschaft verwenden, um die Drehung der Ansicht einzustellen:

let transform = CGAffineTransformRotate(self.block.transform, rotation.rotation) 
self.block.transform = transform 

in Ihrer lol() Funktion.

+0

Ich bin nicht auf der Suche nach einer Benutzerinteraktion mit der Ausrichtung. Stattdessen suche ich nach dem Benutzer, der die Geste ausführt, und die Ansicht dreht jedes Mal ein Pi-Rad. –

Verwandte Themen