2017-05-29 2 views
0

In meinem UiView Ich habe eine subView namens "Container", die eine Drehung Animation entweder ausführen sollte, wenn der Benutzer nach oben oder unten streichen. Im Grunde ist es wie ein Rad, wo, wenn der Benutzer das Rad nach unten streicht, ein gewisses Maß nach unten wischen, während das Wischen die umgekehrte Aktion ausführt.UISwipeGestureRecognizer funktioniert komisch

Hier ist mein viewDidLoad Code:

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Swipe Gesture Recognizers Setup 
    let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeUp(_:))) 
    swipeUp.direction = .up 
    swipeUp.delegate = self as? UIGestureRecognizerDelegate 

    let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeDown(_:))) 
    swipeDown.direction = .down 
    swipeDown.delegate = self as? UIGestureRecognizerDelegate 

    view.addGestureRecognizer(swipeDown) 
    view.addGestureRecognizer(swipeUp) 
} 

und diese sind die zwei Funktionen für Swipe nach oben oder unten:

func swipeUp(_ sender: UISwipeGestureRecognizer) { 
    print("Swiped Up") 
    UIView.animate(withDuration: 1) { 
     self.borderContainer.transform = CGAffineTransform(rotationAngle: 0) 
    } 
} 

func swipeDown(_ sender: UISwipeGestureRecognizer) { 
    print("Swiped Down") 
    UIView.animate(withDuration: 1) { 
     self.borderContainer.transform = CGAffineTransform(rotationAngle: 45) 
    }} 

Alles funktioniert gut, consolle druckt die Wischrichtung jedes Mal die Aktion ausgeführt wird ABER (yeah es gibt ein ABER!) Es ruft die verwandte Funktion nur EINMAL in jeder Richtung auf. Was bedeutet, dass, wenn ich nach unten streichen, dann kann ich nur bis Swipe ...

Ich will es in der Lage sein, jederzeit zu halten swiping nach oben oder unten die Nutzer wollen ...

Was mache ich falsch? las ich über die UIGestureRecogniser mit der Ansicht zusammen drehen deshalb erreichbar, es ist nicht mehr, aber ich angewandt, um die Lösung, die die Geste Recogniser auf die superview und nicht auf die Ansicht Ich bin Animieren ... Why does the Swipe Gesture Recognizer only work once?

Jede Hilfe anzuwenden ist hoch geschätzt!

+1

Das Problem ist, Sie verstehen nicht, die Transformation funktioniert, nicht die Gestenerkennung. Sie müssen Winkel akkumulieren, um die Wunschdrehung zu erreichen. Zum Beispiel, um zweimal zu wischen, müssen Sie um 90 Grad drehen –

Antwort

1

Schauen Sie sich die Wischfunktion genau an. Sie stellen den gleichen Wert jedes Mal ein, wenn Sie nach unten wischen.

Sie müssen hinzufügen 45 Grad zum aktuellen Winkel, wenn Sie es jedes Mal ändern möchten. Ansonsten bleibt es in der gleichen Position wie zuvor.

Versuchen Sie borderContainer.transform.rotated(by: 45) zu verwenden.

+0

Danke! Obwohl border.Container.transform.rotated nicht funktioniert hat, haben Sie mir den richtigen Hinweis gegeben, wo Sie nachsehen können. Ich reparierte mit einer einfachen Fallschleife, die nach dem Winkel überprüft und entsprechend handhabt! – Alex

0

CGAffineTransform wählen nur kürzesten Weg für rotation.Keep daran, dass, wenn Sie something.Your Swipe ist ok drehen, aber Sie müssen Rotation Code ein wenig ändern, damit es funktioniert.

Verwandte Themen