La manipulation des événements tactiles à l'intérieur d'un enfant UIScrollView
Je suis l'affichage d'une série d'images dans un UIScrollView. J'ai à peu près à répliquer l'application Photos.
Mon architecture actuelle est:
J'ai donc une rangée de UIScrollViews à l'intérieur d'un parent UIScrollView.
Le parent UIScrollView a la pagination permis donc je peux passer d'une page à l'autre sans aucun problème.
Le problème est de savoir comment de façon transparente un panoramique sur une image zoomée. J'ai annulé la viewForZoomingInScrollView
méthode pour retourner approprié UIImageView lorsque l'utilisateur pince in/out. J'ai remplacé le scrollViewDidEndZooming
méthode pour définir le parent de la vue canCancelContentTouches
propriété NO
si l'échelle de zoom est supérieur à 1.
De sorte que les utilisateurs sont en mesure de faire un panoramique sur une image. Cependant, ils doivent tenir leur doigt vers le bas pour un moment de franchir le petit retard le parent de défilement de la vue a avant d'envoyer les événements tactiles en bas de la sous-vues. Aussi, une fois que l'utilisateur se déplace dans une seule image, la next/prev images ne pas entrer dans la zone visible lorsque l'utilisateur a atteint la frontière de l'image actuelle.
Des idées?
Grâce.
Vous devez vous connecter pour publier un commentaire.
J'ai dû faire une configuration similaire, mais en gros, j'ai personnalisé a écrit l'ensemble de la chose. Je ne suis pas sûr de savoir comment vous allez obtenir autour du problème de la "livraison" toucher les événements de l'enfant UIScrollView pour le parent UISscrollView lorsque vous atteignez le bord. Vous pouvez essayer primordial UITouchesBegan:withEvent: dans votre parent UIScrollView, et le dumping directement à l'enfant. Bonne chance!
Yay!!! J'ai essayé d'aborder le problème avec un seul UIScrollView, et je pense que j'ai trouvé une solution.
Avant que l'utilisateur démarre le zoom (en
viewForZoomingInScrollView:
), je passe le défilement de l'affichage en mode de zoom (supprimer toutes les pages supplémentaires, réinitialiser la taille du contenu et de l'offset). Lorsque l'utilisateur effectue un zoom arrière à l'échelle de 1,00 (enscrollViewDidEndZooming:withView:atScale:
), je passe à la pagination de la vue (ajouter toutes les pages en arrière, ajuster la taille du contenu et de l'offset).Voici le code d'une simple vue-contrôleur qui ne fait que cela. Cet exemple de bascule entre, des zooms et des casseroles de trois grandes UIImageViews.
Notez qu'une seule vue-contrôleur avec une poignée de fonctions est tout ce qu'il faut, pas besoin de sous-classe UIScrollView ou quelque chose.
Praticable exemple de projet est disponible à http://github.com/andreyvit/ScrollingMadness/ (si vous n'avez pas l'utilisation de Git, cliquez simplement sur bouton de Téléchargement de là). Un fichier lisez-moi est disponible, ce qui explique pourquoi le code a été écrit de la façon dont il est.
(L'exemple de projet illustre également comment effectuer un zoom sur une de défilement de vue de la programmation, et a ZoomScrollView classe qui encapsule une solution pour que. C'est une super classe, mais n'est pas requis pour ce truc. Si vous voulez un exemple qui n'utilise pas ZoomScrollView, revenir quelques engage à commettre l'histoire.)
P. S. Par souci d'exhaustivité, il y a TTScrollView — UIScrollView réimplémentée à partir de zéro. Il fait partie de la grande et célèbre Three20 bibliothèque. Je n'aime pas comment il se sent à l'utilisateur, mais elle permet de faire la mise en œuvre de la pagination/défilement/zoom mort simple.
P. P. S. La Photo réelle application par Apple a pré-SDK code et utilise de pré-SDK classes. On peut repérer deux classes dérivées de pré-SDK variante de UIScrollView à l'intérieur de PhotoLibrary cadre, mais il n'est pas immédiatement clair ce qu'ils font (et ils le font assez souvent). Je peux facilement croire à cet effet l'habitude d'être plus difficile à atteindre dans la pré-SDK fois.
C'est le Andreï du code c# de traduction pour monotouch développeurs...
D'abord, vous devez modifier votre fichier xib.. Insérez 3 contrôleurs de vue et de faire des points de vente comme _page1, _page2, _mainpage.. et le lien de ces prises de vues. remarque vous devez referance de vue du contrôleur de la prise de vue avec _mainpage vue. (désolé pour mon anglais)
J'ai un exemple de projet et il fonctionne parfaitement.
https://code.google.com/p/uiscrollview-touch-events/