10
votes

Paging Uiscrollview avec pages de voisinage furtivement

Regardez l'application App Store, sur l'iPhone ou sur l'iPad, en particulier la pièce à l'écran des détails de l'application qui affiche les captures d'écran. La visionneuse de capture d'écran vous indique la capture d'écran que vous regardez et les bords du prochain et du précédent. J'ai besoin de mettre en œuvre quelque chose comme ça.

Comment je l'ai fait est juste pour pauvre: j'ai construit un UiscrollView et j'ai activé la pagination et a aménagé mon contenu. J'ai fait que le cadre soit la même taille qu'une page de contenu, mais plus petite que l'écran. Ensuite, j'ai désactivé cliptibounds , alors tout ce qui est à l'extérieur du cadre de la vision de ScrollView est toujours tiré. Maintenant, je peux voir les bords des pages adjacentes, mais ils sont en dehors de la vue ScrollView et ne peuvent donc pas recevoir de touches de défilement. L'application App Store vous permet de toucher toute la largeur de cette chose, y compris les bords d'occasion des pages voisines.

Alors, comment ça va?


0 commentaires

3 Réponses :


19
votes

Vous devez ajouter une vue "derrière" la vue de défilement qui couvre toute la zone où vos pages seront visibles. Cette vue devrait être implémenter -Hittest: sans lieu :. Cette méthode sera appelée par le système d'exploitation pour déterminer où acheminer un événement tactile particulier. Tout ce que vous avez à faire est de renvoyer votre vue de défilement pour tous les points de cette vue de support:

objectif-c xxx

swift 4.0 xxx < / pré>


4 commentaires

Je ne peux pas croire que c'est aussi simple! Ce sera un jour ou deux avant que je puisse essayer (une mauvaise planification sur la partie de mon client constitue en fait une urgence de ma part, mais je vous soutiendrai provisoirement le chèque de toute façon. À votre santé!


J'ai essayé la solution ci-dessus aussi, mais trouvez que les articles eux-mêmes dans la vue Scroll de Scroll ne reçoivent plus d'événements tactiles - Seule la vision de ScrollView. Est-ce que ce comportement attendu?


@Lk. J'ai eu le même problème. Le problème est que les événements tactiles ne sont pas transmis aux sous-espions entraînant un bloc de propagation immédiate de l'événement. J'ai résolu cela en sous-classement Uiscrollview et remplace la méthode Hittest pour l'Uiscrollview. Regardez un peu plus loin sur cette page pour une addition à la solution actuelle.


@ Lk @ bitShiftcop: Pour moi, au lieu de retourner le uiview , il a aidé à retourner [uIView hittest: PT windevent: événement] - de cette façon, ça va retourner L'arborescence de dépendance tactile et conduisez-le au dernier objet de la manière, au lieu d'arrêter au premier - ou donc je crois :)



0
votes

N'oubliez pas de transférer les touches à la sous-ScrollView SUBVIEWS Si vous souhaitez que votre contenu reste interactif en dehors des limites.

L'exemple suivant est vrai si vous avez mis votre contenu ScrollView dans un conteneur supplémentaire. Si ce n'est pas le cas, la boucle sur les sous-espions et renvoyez celui qui est frappé par votre contact. xxx


1 commentaires

J'ai essayé cela, mais la méthode Hittest de l'Uiscrollview n'est jamais appelée. Comment faites-vous votre hiérarchie de vue?



1
votes

Je n'ai pas de classement assez élevé pour commenter les réponses ci-dessus, mais vous pouvez trouver un didacticiel et un code d'exemple sur le site de Ray Wenderlich: Comment utiliser Uiscrollview pour faire défiler et zoomer

Ce code utilise les techniques énumérées ci-dessus, en particulier la logique de test HIT.


0 commentaires