2009-05-22 7 views
0

J'ai implémenté un UIScrollView qui contient une grille d'objets UIImageView. Pour les deux, la vue d'ensemble et ses sous-vues, userInteractionEnabled est OUI. Comme l'utilisateur fait défiler et son/son doigt touche un UIImageView, il reconnaît imediately un robinet sur ce qui est pas ce que je veux;)Comment puis-je détecter si l'utilisateur veut juste faire défiler et ne pas appuyer sur un UIImageView dans un UIScrollView?

A l'intérieur de ce que les objets UIImageView J'ai cette méthode:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if ([touch view] == self && [touch tapCount] >= 1) { 
     NSLog(@"Cooooool! The user touched me!"); 
    } 
} 

Y a-t-il un moyen de reconnaître quelque chose comme "oh non, l'utilisateur voulait vraiment faire défiler seulement, alors ne prenez pas cette touche trop au sérieux!"? Fondamentalement, ce dont j'ai besoin est le comportement de l'écran d'accueil, où un doigt peut toucher une icône, mais lorsque l'utilisateur commence à défiler et lève le doigt, l'application touchée ne sera pas lancée.

Répondre

2

UIScrollView a déjà implémenté ce comportement pour vous. Si l'utilisateur est assez rapide pour faire glisser, votre méthode touchesBegan:withEvent: ne sera tout simplement jamais appelée.

Si, en revanche, l'utilisateur est lent et que la vue déroulante transmet le contact à votre sous-classe UIImageView, mais ne réalise alors que l'utilisateur destiné à faire défiler, il appellera la méthode personnalisée -(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event. Il suffit de l'implémenter, et vous serez averti des touches annulées.