2010-04-06 9 views
2

J'ai une vue dans un UIScrollView qui charge une sous-vue supplémentaire lorsque l'utilisateur appuie sur une certaine zone. Lorsque cette sous-vue supplémentaire est visible, je veux que tous les événements tactiles soient gérés par ceci - et non par le scrollview.Passage des événements tactiles aux sous-vues

Il semble que les premiers événements sont gérés par la sous-vue, mais touchesCancelled est appelée et la fonction de défilement prend en charge la détection tactile.

Comment puis-je m'assurer que la sous-vue obtient tous les événements tant que l'activité de mouvement est effectuée sur cette vue?

Ceci est mon application sur touchesMoved - que je croyais faire le travail ...

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[touches allObjects] objectAtIndex:0]; 
    CGPoint touchPt = [touch locationInView:self]; 

    UIView *hitView = [self hitTest:touchPt withEvent:event]; 
    UIView *mySubView = subviewCtrl.view; 

    if(hitView == mySubView) { 
     [subviewCtrl.view touchesMoved:touches withEvent:event]; 
    } 
    else { 
     NSLog(@"Outside of view..."); 
    } 
} 

Répondre

1

La hiérarchie de la chaîne de répondeur « normalement » va de sous-vue à superview, de sorte que vous ne devriez pas avoir à faire la hitTest dans votre aperçu. Le problème que vous rencontrez n'est pas que vous avez besoin de superview pour appeler touchesMoved sur la sous-vue, mais plutôt que UIScrollView subvertit la hiérarchie normale de la chaîne de répondeurs en interceptant les événements tactiles afin de fournir une expérience de défilement fluide à l'utilisateur. Si vous ne voulez pas ce comportement, vous pouvez désactiver ce comportement dans le ScrollView en lui envoyant le message suivant:

[scrollView setDelaysContentTouches:NO]; 

Notez que cela fera en sorte que votre sous-vue a la première fissure à la manipulation des événements en question (à condition que ce soit en fait le premier répondant). Cela peut avoir un impact négatif sur les performances de défilement et de zoom du scrollView, ce qui est probablement la raison pour laquelle Apple le définit par défaut sur YES.

Questions connexes