web-dev-qa-db-fra.com

Détecter le geste de secousse IOS Rapide

Je développe une application avec un système de gestes. En gros, si je mets l'iPhone à gauche, mon application remplira une fonction, si je mets l'iPhone à droite, une autre fonction, avec d'autres gestes.

Je ne sais pas comment travailler avec ça, j'essaye de chercher dans Google mais ça ne marche pas, le résultat est seulement un geste tactile et non pas un geste.

quelqu'un a un tutoriel pour m'aider?

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 facile à mettre en œuvre:

1) Indiquez à iOS quel contrôleur de vue est le premier de la chaîne de répondeur:

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

2) Gérer l’événement d’une manière ou d’une autre:

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

Celle-ci a été mise à jour pour IOS 12 - voir Documents Apple Vous n'avez plus besoin d'ajouter la méthode devenirFirstResponder ().

Il vous suffit d'ajouter la fonction motionEnded à votre code.

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

La réponse rapide de Speedy99 est dans la version Objective C

- (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