Détecter un touch & hold ?

apocaalypsoapocaalypso Membre
02:26 modifié dans API UIKit #1
Bonjour,

dans mon application, je souhaite détecter un touch & hold, c'est à  dire lorsque l'utilisateur touche l'écran sans le relâcher mais je n'en ai pas trouver.
Y-a-t-il une méthode pour cela ?

Merci d'avance !

Réponses

  • GreensourceGreensource Membre
    02:26 modifié #2
    Dans UITouch tu as une property "phase" qui te donne le type de "Touch", l'un d'entre eux est:
    UITouchPhaseStationary
    A finger is touching the surface but hasn't moved since the previous event.

    Available in iPhone OS 2.0 and later.

    Declared in UITouch.h.

    C'est ce dont tu as besoin?
  • Philippe49Philippe49 Membre
    02:26 modifié #3
    As-tu vu ce post
  • apocaalypsoapocaalypso Membre
    02:26 modifié #4
    Ah merci Philippe, j'ai fait une recherche avant de poster mais je ne l'ai pas vu.
  • apocaalypsoapocaalypso Membre
    02:26 modifié #5
    J'ai bien utilisé la méthode d'Ali et ça marche, dans mon touchBegan j'ai un performSelector qui appelle une méthode qui créer un NSTimer avec mon action. Lorsque l'utilisateur relâche l'écran, je le détecte avec touchesEnded: et je fait [timer invalidate]. Le problème, c'est que lorsque je veux réinitialiser mon timer avec :
    monTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(performMove) userInfo:nil repeats:YES];
    

    ça ne marche pas.
    Une idée ?
  • Philippe49Philippe49 Membre
    02:26 modifié #6
    Qu'est-ce qui ne marche pas ?
  • apocaalypsoapocaalypso Membre
    02:26 modifié #7
    Le timer ne semble pas se reexécuter.
  • AliGatorAliGator Membre, Modérateur
    02:26 modifié #8
    Et ton timer il sert à  quoi ? Je veux dire c'est un timer que tu crées pour un autre besoin (qui n'a rien à  voir avec le fait que tu veux détecter un appui long) ? Parce que si c'est pour calculer le temps de ton appui et détecter à  partir d'un seuil (genre 2s) que c'est un appui long et pas un appui court... bah pas besoin de timer puisque [tt]performSelector:withObject:afterDelay:[/tt] s'occupe de la gestion du "timer interne" qui ne déclenche l'action souhaitée qu'après ledit délai...
  • apocaalypsoapocaalypso Membre
    02:26 modifié #9
    Non non, je veux bien détecter un appuie long. Dans le touchesBegan, mon performSelector s'exécute instantanément.
  • 02:26 modifié #10
    <br />- (void)touchBegan:machinchosebidule<br />{<br /> _isLong = NO;<br /> [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(_isLong)];<br /> [self performSelector:@selector(isLong) withObject:nil afterDelay:1.0];<br />}<br /><br />- (void)toucheEnded:Machinchosebidule<br />{<br /> if(_isLong)<br />&nbsp; &nbsp;  // appuie long<br />}<br /><br />- (void)isLong<br />{<br />&nbsp; _isLong = YES;<br />}
    
  • apocaalypsoapocaalypso Membre
    02:26 modifié #11
    En fait le timer faisait bouger un élément dans la vue, et je n'ai pas vu que j'avais une condition qui empêchait de refaire bouger l'élément.
    C'est encore une erreur toute bête mais c'est finalement les plus compliquées à  déceler  :)

    Merci beaucoup de votre aide !
Connectez-vous ou Inscrivez-vous pour répondre.