Comment obtenir la fonctionnalité du geste à long presse dans iOS 3.2 ci-dessous
-
14-10-2019 - |
Question
UILongPressGesture est disponible dans ios ver 3.2 et versions ultérieures. Mais je suis en train de développer des applications pour la compatibilité maximale et donc le ciblage ios ver2.0
Quelqu'un peut-il s'il vous plaît me guider sur la façon d'accomplir à long geste de presse à ios v2.0
La solution
Pour un seul doigt, il est assez simple: Démarrer une minuterie dans la méthode touchesBegan
et déclencher une action lors du déclenchement de la minuterie. Annuler la minuterie si vous obtenez un touchesEnded
avant qu'il ne tire. Voici une implémentation qui utilise la méthode performSelector:withObject:afterDelay:
.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self performSelector:@selector(fireLongPress)
withObject:nil
afterDelay:LONG_PRESS_THRESHOLD];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[NSObject cancelPreviousPerformRequestsWithTarget:self];
}
- (void)fireLongPress {
// do what you want to do
}
Vous voudrez probablement aussi tuer la minuterie si le doigt se déplace trop loin.
Avec multitouch, il est un peu plus compliqué. Vous devez garder une trace dont le toucher est qui, et décider quoi faire par exemple quand un doigt a enfoncé assez longtemps, mais l'autre n'a pas (ou figure ce UILongPressGestureRecognizer
fait).
Autres conseils
Mettre en œuvre les méthodes de touches...
dans votre vue. Si un certain laps de temps passe entre touchesBegan:withEvent:
et touchesEnded:withEvent:
sans qu'aucun événement touchesMoved:withEvent:
, vous avez une pression longue.