/ / Comment mettre en place des retouches à l'intérieur en touchesBegan, touchesEnded - iphone, ios, cacao-touch, uigesturerecognizer

Comment mettre en œuvre la retouche à l'intérieur dans les touchesBegan, touchesEnded - iphone, ios, cacao-touch, uigesturerecognizer

Je me demande si quelqu'un sait comment mettre en œuvre la réponse de "retouche à l'intérieur" lorsqu'un utilisateur appuie, puis lève le doigt dans le touchesBegan, touchesEnded méthodes. Je sais que cela peut être fait avec UITapGestureRecognizer, mais en fait, j’essaie de faire en sorte que cela ne fonctionne que sur un robinet rapide (avec UITapGestureRecognizer, si vous maintenez votre doigt longtemps, soulevez-le, il continue de fonctionner). Quelqu'un sait comment mettre en œuvre cela?

Réponses:

4 pour la réponse № 1

En utilisant le UILongPressGesturizer est en fait une bien meilleure solution pour imiter toutes les fonctionnalités d’un UIButton (touchUpInside, touchUpOutside, touchDown, etc.):

- (void) longPress:(UILongPressGestureRecognizer *)longPressGestureRecognizer
{
if (longPressGestureRecognizer.state == UIGestureRecognizerStateBegan || longPressGestureRecognizer.state == UIGestureRecognizerStateChanged)
{

CGPoint touchedPoint = [longPressGestureRecognizer locationInView: self];

if (CGRectContainsPoint(self.bounds, touchedPoint))
{
[self addHighlights];
}
else
{
[self removeHighlights];
}
}
else if (longPressGestureRecognizer.state == UIGestureRecognizerStateEnded)
{
if (self.highlightView.superview)
{
[self removeHighlights];
}

CGPoint touchedPoint = [longPressGestureRecognizer locationInView: self];

if (CGRectContainsPoint(self.bounds, touchedPoint))
{
if ([self.delegate respondsToSelector:@selector(buttonViewDidTouchUpInside:)])
{
[self.delegate buttonViewDidTouchUpInside:self];
}
}
}
}

2 pour la réponse № 2

Vous pouvez implémenter touchesBegan et touchesEnded en créant une sous-classe UIView et en la mettant en œuvre à cet endroit.

Cependant, vous pouvez aussi utiliser un UILongPressGestureRecognizer et atteindre les mêmes résultats.


2 pour la réponse № 3

Je l'ai fait en mettant une minuterie qui se déclencheen toucheBegan. Si cette minuterie est toujours en cours d'exécution lorsque touchesEnded est appelée, exécutez le code que vous souhaitez. Cela donne l'effet de touchUpInside.

  -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSTimer *tapTimer = [[NSTimer scheduledTimerWithTimeInterval:.15 invocation:nil repeats:NO] retain];
self.tapTimer = tapTimer;
[tapTimer release];
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if ([self.tapTimer isValid])
{

}
}

0 pour la réponse № 4

Vous pouvez en créer BOOL variable alors en -touchesBegan vérifiez quelle vue ou ce dont vous avez besoin a été touché et définissez cette BOOL variable à YES. Après cela dans -touchesEnded vérifier si cette variable est YES et votre vue ou ce que vous avez besoin a été touché qui sera votre -touchUpInside. Et bien sûr mis BOOL variable à NO après.


0 pour la réponse № 5

Vous pouvez ajouter un UTapGestureRecognizer et un UILongPressGestureRecognizer et ajouter une dépendance en utilisant [tap requiresGestureRecognizerToFail:longPress]; (appuyez et maintenez enfoncé étant les objets des dispositifs de reconnaissance ajoutés).

De cette façon, le tapotement ne sera pas détecté si vous appuyez longuement sur.