UIButton appui long avec doigt stationnaire
Question
Dans mon projet, j'ai besoin d'utiliser un UIButton (ou un autre composant) pour gérer les événements en appuyant longuement. Permettez-moi de vous expliquer, je devrais penser que je maintiens le bouton une minuterie pour compter les secondes et relâchez pour arrêter la pression, j'ai essayé avec la gestion de UILongPressGestureRecognizer mais ce n'est pas le cas car je me souviens de l'événement lorsque le bouton est maintenu enfoncé maisseulement si je bouge mon doigt, mais je souhaite que la minuterie disparaisse et compte tout le temps pendant lequel le bouton est maintenu enfoncé (avec votre doigt immobile) et a cessé de compter lorsque le doigt est relâché.
Quelqu'un sait-il comment m'aider? Merci
La solution
Utilisez ces deux méthodes pour les événements de boutons.touchDown
est appelé lorsque vous appuyez sur le bouton et touchUp
est appelé lorsque vous soulevez votre doigt du bouton.Calculez la différence de temps entre ces deux méthodes.Vous pouvez également démarrer le minuteur dans touchDown
et l'arrêter / le redémarrer dans touchUp
.
//connect this action with Touch up inside
- (IBAction)touchUp:(id)sender {
NSLog(@"up");
}
//connect this to tocuh down
- (IBAction)touchDown:(id)sender{
NSLog(@"down");
}
Mis à jour En codant, vous pouvez écrire comme ça
[btn addTarget:self action:@selector(touchUp:) forControlEvents:UIControlEventTouchUpInside];
[btn addTarget:self action:@selector(touchDown:) forControlEvents:UIControlEventTouchDown];
et dans xib
Autres conseils
La même chose que j'ai fait ... Comme vous l'avez dit à propos de UILongPressGestureRecognizer, je ne peux pas le comprendre ... mais vous pouvez écrire votre code à l'intérieur de -(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
}
.J'ai fait de même en utilisant cette méthode et j'ai obtenu un résultat réussi .. :).Vous n'avez même pas besoin d'ajouter une minuterie, à la place, vous pouvez utiliser ...
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 1.0;
lpgr.delegate = self;
Je pense que cela fonctionne parfaitement ..