Un UIScrollView
avec la pagination activée s'arrêtera à des multiples de sa largeur (ou hauteur) de cadre. La première étape consiste donc à déterminer la largeur souhaitée de vos pages. Faites que la largeur du UIScrollView
. Ensuite, définissez les tailles de votre sous-vue, quelle que soit la taille dont vous avez besoin, et définissez leurs centres en fonction de multiples de la UIScrollView
largeur de.
Ensuite, puisque vous voulez voir les autres pages, bien sûr, mis clipsToBounds
à NO
comme mhjoy déclaré. La partie astuce consiste maintenant à le faire défiler lorsque l'utilisateur commence le glissement en dehors de la plage du UIScrollView
cadre de. Ma solution (lorsque j'ai dû le faire très récemment) était la suivante:
Créez une UIView
sous - classe (c'est-à-dire ClipView
) qui contiendra les UIScrollView
et ses sous-vues. Essentiellement, il devrait avoir le cadre de ce que vous supposeriez UIScrollView
qu'il aurait dans des circonstances normales. Placez le UIScrollView
au centre du ClipView
. Assurez-vous que le ClipView
's clipsToBounds
est défini sur YES
si sa largeur est inférieure à celle de sa vue parent. En outre, le ClipView
nécessite une référence au UIScrollView
.
La dernière étape consiste à remplacer - (UIView *)hitTest:withEvent:
à l'intérieur du fichier ClipView
.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
Cela élargit fondamentalement la zone tactile de la UIScrollView
au cadre de la vue de son parent, exactement ce dont vous avez besoin.
Une autre option serait de sous UIScrollView
-classer et de remplacer sa - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
méthode, mais vous aurez toujours besoin d'une vue de conteneur pour effectuer le découpage, et il peut être difficile de déterminer quand retourner en YES
fonction uniquement du UIScrollView
cadre de.
REMARQUE: vous devriez également jeter un oeil à hitTest: withEvent: modification de Juri Pakaste si vous rencontrez des problèmes avec l'interaction de l'utilisateur de sous-vue.