Problème de touch sur un élément en mouvement
apocaalypso
Membre
Bonjour,
J'ai plusieurs UILabel que je fais bouger avec UIView beginAnimation: en changeant leur coordonnées de centre :
Dans ma méthode de détection de touch, je souhaite, lorsque l'utilisateur touche un UIlabel en particulier le détecter. Mais ceci ne marche que lorsque le label n'est pas encore en mouvement, voici mon code pour détecter le label :
Je ne comprend pas pourquoi ça ne marche pas, peut-être que la frame du label n'est pas mis à jour avec les nouvelles coordonnées ?
Merci d'avance !
J'ai plusieurs UILabel que je fais bouger avec UIView beginAnimation: en changeant leur coordonnées de centre :
[UIView beginAnimations:nil context:self];<br /> [UIView setAnimationCurve:UIViewAnimationCurveLinear];<br /> [UIView setAnimationDuration:7];<br /> [UIView setAnimationDelay:7];<br /> label.center = CGPointMake(x, y);<br /> [UIView commitAnimations];<br />
Dans ma méthode de détection de touch, je souhaite, lorsque l'utilisateur touche un UIlabel en particulier le détecter. Mais ceci ne marche que lorsque le label n'est pas encore en mouvement, voici mon code pour détecter le label :
for(UILabel *label in self.subviews)<br /> {<br /> if([label isKindOfClass:[UILabel class]] && CGRectContainsPoint(label.frame, location))<br /> {<br /> NSLog(@"Touched = %@", label.text);<br /> break;<br /> }<br /> }
Je ne comprend pas pourquoi ça ne marche pas, peut-être que la frame du label n'est pas mis à jour avec les nouvelles coordonnées ?
Merci d'avance !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pourquoi ne pas utiliser les méthodes containsPoint et hitTest de UIView (dont dérive UILabel) ? D'autant que le problème de CGRectContainsPoint et des frames c'est que comme leur nom l'indique ce sont de Rect et des frames, donc rectangulaires et surtout parallèles à l'écran... or comme ton animation peut contenir des rotations de ton UILabel (même si ce n'est pas le cas ici, mais de manière générale et conceptuelle), bah dans ce genre de cas la frame n'est plus valide, et il me parait pas la meilleure des idées que de se baser dessus dans ce genre de cas.
Chaque méthode (selector) lance une nouvelle animation.
Mais par contre, comment pourrais-je faire pour faire passer des arguments à la méthode cible ?
UIKit allows three different forms of action selector:
- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event
On peut donc récupérer l'event et le sender. On peut lire les données de ton UILabel, et si tu en as plusieurs le personnaliser en renseignant sa property tag.
Mais le problème qui demeure c'est que l'action associée à mon bouton ne se déclenche pas lorsque celui-ci est en mouvement.