2010-03-04 13 views
4

J'ai une hiérarchie où UIScrollviews existent l'un dans l'autre. Comment puis-je rediriger les événements de balayage pour une certaine zone vers une vue de défilement interne?UIScrollView dans UIScrollView

Répondre

2

Si vous définissez vos UIScrollViews pour être uniquement défilables dans un axe ou dans l'autre (par exemple, définissez leur propriété contentSize de manière appropriée.) Pour que la vue soit défilable verticalement, définissez sa valeur contentSize.width comme identique à sa bounds.size.width). alors ils devraient juste travailler, en supposant que pas deux vues défilent dans le même axe. Habituellement, les vues 'enfant' défilent verticalement et la vue parent défile horizontalement.

+0

Le UIScrollView principal doit être défilable dans toutes les directions car il est zoomable. – Jean

1

Si c'est possible, vous devriez le revoir pour éviter cela. Safari gère ce type de situation, c'est-à-dire les iframes et les zones de texte, en faisant défiler la vue intégrée avec deux doigts. Ce n'est pas très détectable, mais c'est mieux que l'alternative, ce qui serait encore plus frustrant. Si une vue incorporée était à peine visible à l'écran, une tentative de faire défiler la vue extérieure pourrait à la place faire défiler la vue interne, mais pas beaucoup de choses; Il semblerait que ce soit non-réactif. Cela dit, si vous voulez toujours faire cela, essayez de régler la vue de défilement externe canCancelContentTouches à NO. Cela devrait empêcher le défilement de la vue extérieure lorsqu'un contact commence dans la vue intérieure. Obtention de défilement à deux doigts de style Safari impliquerait probablement sous-classement UIScrollView et l'implémentation de la méthode -touchesShouldBegin:withEvent:inContentView:.