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 № 1En 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.