UIScrollView d'échange personnalisé taille
de pagination dans UIScrollView est une grande fonctionnalité, ce dont j'ai besoin ici est de définir la pagination à une distance plus petite, par exemple je veux que mon UIScrollView à la page de moindre taille que le UIScrollView largeur du cadre.
Grâce
- voir cette réponse stackoverflow.com/a/35197919/1378447
- Je partage beaucoup plus simple façon de le faire ici: stackoverflow.com/a/36641652/378433
Vous devez vous connecter pour publier un commentaire.
Il y a un
UIScrollView
délégué méthode que vous pouvez utiliser. Définissez votre classe comme le défilement de la vue du délégué, puis de mettre en œuvre les éléments suivants:Le paramètre vitesse est nécessaire pour assurez-vous que le défilement se sent naturel et ne prend fin abruptement quand un contact se termine avec votre doigt toujours en mouvement. La largeur de la cellule et de l'espacement entre les cellules sont la largeur de la page et l'espacement entre les pages de votre point de vue. Dans ce cas, je suis en utilisant un
UICollectionView
.if (velocity.x > 0) { targetIndex = ceil(targetX / (self.cardViewWidth + kCardSpacing)); } else { targetIndex = floor(targetX / (self.cardViewWidth + kCardSpacing)); }
scrollView.decelerationRate
pour obtenir la sensation que vous êtes à la recherche pour - j'ai dû mettre àUIScrollViewDecelerationRateFast
avant il semblait naturelround
si aucune vitesse.x a été trouvé (c'est à dire touchez pour ne pas glisser)scroll.clipsToBounds = NO
Créer une sous-classe UIView (e.g HackClipView) et remplacer le hitTest:withEvent: méthode
Définir la
HackClipView.clipsToBounds = YES
Voir cette réponse pour plus de détails
Mise à jour:
Comme indiqué dans lucius de réponse, vous pouvez maintenant mettre en œuvre la
UIScollViewDelegate
protocole et le- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
méthode. Comme letargetContentOffset
est un pointeur. L'utilisation de cette méthode ne garantit pas le même résultat avec le défilement de l'affichage des pages que l'utilisateur peut faire défiler plusieurs pages à la fois. Mais le réglage de ladescelerationRate
àfast
sera presque vous donner le même résultatpointInside:withEvent:
dans un rouleau de vue sous-classe.clipToBounds=NO
) seront retirés du superview.Vous devez désactiver la pagination et ajouter un UIPanGestureRecognizer à un défilement d'afficher et de gérer la pagination de vous-même.
}
Swift 4.1 solution qui simplifie la réutilisation:
Juste se conformer à
ScrollViewCustomPageSize
protocole dans votre UIScrollView/UITableView/UICollectionView délégué et vous sont effectués, par exemple:Pour une fantaisie de défilement, je vous le recommande pour définir
collectionView.decelerationRate = UIScrollViewDecelerationRateFast
targetIndex
avant de calculeroffsetX
dansgetTargetContentOffset
méthode. Je n'ai pas fait de test, mais quelque chose comme ça devrait fonctionner:targetIndex = max(targetIndex, floor(getCurrentPage(scrollView: scrollView)); targetIndex = min(targetIndex, ceil(getCurrentPage(scrollView: scrollView))
Définir la
contentOffset
dans-(void)scrollViewDidScroll:(UIScrollView *)scrollView
méthode.Également se référer à UIScrollViewDelegate refernces
J'ai eu le même problème j'ai donc fait une coutume UIScrollView.
Il est disponible sur Github maintenant, parce que quand j'ai cherché je n'ai pas trouver toutes les solutions de ce type. Profitez-en!
https://github.com/MartinMetselaar/MMCPSScrollView
Si vous avez des questions au sujet de ce composant, il suffit de demander.
J'ai eu le même problème à court d'années. Mon approche a été d'ajouter un deuxième
UIScrollView
à la scrollview. De sorte que vous pouvez passer à la page. Sur cette page, il semble que si la page est plus grande que l'écran. J'espère que cela fonctionne aussi dans votre situation. 😉Sandro Meier
Cela semblait fonctionner beaucoup mieux pour moi:
UIScrollView D'Échange Personnalisé
Ici, ils sont en ajoutant de la scrollview (garder la pagination de la gentillesse) comme une sous-vue à un ExtendedTouchView ou sous-classe de UIVIew et d'écraser le coup de la méthode de test
Cela fait exactement whatI voulais, avec un minimum de code et des maux de tête.
L'ajout de modules de reconnaissance de geste ou d'autres sous-vues et ainsi de suite est stupide. Il suffit de régler le délégué pour le défilement de l'affichage d'un imlement sur de ci-dessous :
Swift 4.1, iOS11+:
La façon la plus simple est d'ajouter ce code