iPhone Dev : Reconnaissance des gestes

Les applications iPhone (iPad et iPod aussi vous me direz) sont basées sur les gestes que l'on peut faire sur l'écran. Si la plupart des applications utilisent uniquement l'appui à un doigt, il peut être intéressant d'utiliser d'autres gestes. Mais pour cela encore faut-il être capable de les différencier et les traiter dans son code...

 

La théorie

C'est là qu'intervient la classe UIGestureRecognizer qui va vous aider àdétecter et traiter ces différents gestes. UIGestureRecognizer est une classe abstraite avec sous-classes qui reprennent les différents gestes possibles (une sous-classe par geste) :

  • UITapGestureRecognizer : appui sur l'écran (plusieurs fois, avec un ou plusieurs doigts)
  • UIPinchGestureRecognizer  : pincement de l'écran (comme pour les zooms)
  • UIRotationGestureRecognizer : rotation
  • UISwipeGestureRecognizer : glissement (comem dans l'appli photo pour psser d'une photo à l'autre)
  • UIPanGestureRecognizer : laisser appuyer et déplacer
  • UILongPressGestureRecognizer: appui long 

En fonction du type de la sous-classe que vous utilisez, vous pouvez utilisez plusieurs comportements différents. Si je prends pour example UITapGestureRecognizer, il est possible de définir que le geste soit reconnu uniquement si l'utilisateur appuie avec deux doigts.

 

Ces GestureRecognizer (bah oui en Français ça ne va pas être joli...) doivent être rattachés au panel (View) sur lequel ils sont cencés détectés le geste qui leur est attribué.

 

Une fois ce geste reconnu, le détecteur de geste (oui je l'avais dit qu'en français c'était pas terrible...) au travers du panel va envoyer un (ou plusieurs) message(s) (nommés action message pour Apple) qui va lui lancer l'action que vous avez initialisée pour ce geste.

 

Par exemple, lorsque vous pincez l'écran pour zoomer, la vue qui contient la photo va détecter votre pincement. Cette vue va envoyer un message contenant le geste (pincement) et l'échelle (en fonction de l'écart des doigts au début du pincement et à la fin). Ce message va lancer l'action de zoom sur l'image à partir des informations fournies dans le message (notamment l'échelle qui va permettre de déterminer le coefficient du zoom).

 

L'exemple (rapide)

Voici justement l'exemple de code du zoom :

 

Dans un premier temps, on défini le détecteur et on l'ajoute à la vue concernée qui sera chargée de détecter le geste et d'envoyer le message.

 UIPinchGestureRecognizer *zoom = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(zoom:)] autorelease]; [[self view] addGestureRecognizer:zoom]; 

 

Ensuite, on crée une action qui va être lancée quand elle recevra le message de détection du geste envoyé par la vue.

- (void)zoom:(UIPinchGestureRecognizer *)recognizer
{
  NSLog(@"Echelle du zoom: %f", recognizer.scale);
}

 

Comme vous pouvez le constater, c'est assez simple. Scale est une propriété de UIPinchGestureRecognizer.

 

Pour aller plus loin

Pour plus d'informations sur le UIGestureRecognizer c'est sur l'Apple Developper et c'est ici.

Commenter cet article

we love apple 24/12/2016 11:48

I hope you will share such type of impressive contents again with us so that we can utilize it and get more advantage.