web-dev-qa-db-de.com

Erschütterungsgeste erkennen IOS Schnell

Ich entwickle eine App mit einem Gesten-System. Wenn ich das iPhone nach links wende, wird meine App eine Funktion ausführen, wenn ich das iPhone nach rechts, eine andere Funktion mit anderen Gesten wende.

Ich habe keine Ahnung, wie ich damit arbeiten soll, ich versuche die Suche in Google, aber nicht die Arbeit. Das Ergebnis ist nur eine Berührungsgeste und keine Bewegungsgeste.

hat jemand ein Tutorial, um mir zu helfen?

14
FelipeRsN

Swift3 ios10:

override func viewDidLoad() {
    super.viewDidLoad()
    self.becomeFirstResponder() // To get shake gesture
}

// We are willing to become first responder to get shake motion
override var canBecomeFirstResponder: Bool {
    get {
        return true
    }
}

// Enable detection of shake motion
override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
    if motion == .motionShake {
        print("Why are you shaking me?")
    }
}
49
Speedy99

Super einfach zu implementieren:

1) Lassen Sie iOS wissen, welcher View Controller der erste in der Responder-Kette ist:

override func viewDidLoad() {
    super.viewDidLoad()
    self.becomeFirstResponder()
}   
override func canBecomeFirstResponder() -> Bool {
    return true
}

2) Behandeln Sie die Veranstaltung auf eine Art und Weise:

override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
    if(event.subtype == UIEventSubtype.MotionShake) {
        print("You shook me, now what")
    }
}
15
Ryan Dines

Swift 5

Fügen Sie ViewController einfach die folgenden Methoden hinzu und führen Sie den Code aus

    override func becomeFirstResponder() -> Bool {
            return true
      }

     override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?){
      if motion == .motionShake
      {
            print("Shake Gesture Detected")
            //show some alert here
      }
 }
3
swiftBoy

Dies wurde für IOS 12 aktualisiert - siehe Apple Docs Sie müssen nicht mehr die Methode beenFirstResponder () hinzufügen.

Sie müssen lediglich die Funktion motionEnded zu Ihrem Code hinzufügen.

override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) 
{
    // code here
}
2
Howard Panton

Die schnelle Antwort von Speedy99 liegt in der Objective C-Version

- (void)viewDidLoad {
    [super viewDidLoad];
    [self becomeFirstResponder];
}

- (BOOL)canBecomeFirstResponder{
    return true;
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
    if(event.subtype == UIEventSubtypeMotionShake){
       NSLog(@"Why are you shaking me?");
    }
}
1
Prakash

Swift 5

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.becomeFirstResponder()
    }

    override var canBecomeFirstResponder: Bool {
        get {
            return true
        }
    }

    override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
        if motion == .motionShake {
            print("shake")
        }
    }

}
1
user2168735

Swift Docs: - https://developer.Apple.com/documentation/uikit/uiresponder .

Um Bewegungsereignisse zu erkennen, hat Swift 3 Methoden bereitgestellt: -

  1. func motionBegan () -> Zeigt dem Empfänger an, dass die Bewegung begonnen hat

  2. func motionEnded () -> Zeigt dem Empfänger an, dass ein Bewegungsereignis beendet wurde

  3. func motionCancelled () -> Zeigt dem Empfänger an, dass ein Bewegungsereignis abgebrochen wurde

Zum Beispiel, wenn Sie das Bild nach dem Wackeln aktualisieren möchten

class ViewController: UIViewController {
   override func motionEnded(_ motion: UIEvent.EventSubtype, with event: 
                                                                        UIEvent?) 
   {
        updateImage()
   }

   UpdateImage(){
      // Implementation
   }
}
0
Kathi Shiva Ram