UIScrollView D'Échange Personnalisé
Ma question a à voir avec un formulaire personnalisé de la pagination qui je suis en train de le faire avec une barre de défilement, et c'est plus facile à visualiser si vous considérez d'abord le type de défilement de l'affichage mis en œuvre dans une machine à sous.
Donc dire que mon UIScrollView a une largeur de 100 pixels. Supposons qu'il contient les 3 intérieures de points de vue, chacune avec une largeur de 30 pixels, tels qu'ils sont séparés par une largeur de 3 pixels. Le type de pagination qui je voudrais, c'est que chaque page est un de mes points de vue (30 pixels), et non pas toute la largeur de défilement de la vue.
Je sais que généralement, si la vue prend toute la largeur de défilement de la vue, et la pagination est activée, puis tout fonctionne. Cependant, à mon échange personnalisé, je veux aussi vues environnantes dans le défilement de la vue pour être visible.
Comment puis-je faire?
Découvrez Début de Développement pour iPhone par Mark & laMarche - il a une section sur la création d'une machine à sous à partir d'un UIPickerView - ce n'est pas un UIScrollView mais peut-être que cela va faire ce que vous voulez?
J'ai regardé dans UIPickerViews, et j'ai passé un peu de temps à essayer de faire l'horizontale et à faire d'autres personnalisations pour l'adapter à mes besoins. Toutefois, la limite de ne pas être en mesure de modifier la hauteur (n'importe comment dur j'ai essayé) ne me permet pas de faire certaines choses, je vais essayer. Ce que j'ai pratiquement devez faire est d'obtenir un personnalisable UIScrollView. Pour le moment je suis en train de tricher mon chemin à travers par exemple d'avoir plusieurs UIScrollViews uns à côté des autres, et de définir leur contenu de manière appropriée.
OriginalL'auteur Olshansk | 2011-08-04
Vous devez vous connecter pour publier un commentaire.
J'ai juste fait cela pour un autre projet. Ce que vous devez faire est de placer la UIScrollView dans une implémentation personnalisée de UIView. J'ai créé une classe pour cela appelé ExtendedHitAreaViewController. Le ExtendedHitAreaView remplace le hitTest fonction de retour de son premier enfant objet, ce qui sera de votre barre de défilement de la vue.
De votre barre de défilement de la vue devrait être la taille de la page que vous voulez, c'est à dire, 30px avec clipsToBounds = NON.
L'étendu de la zone frappée par la vue doit être la taille totale de la zone que vous souhaitez être visible, avec clipsToBounds = OUI.
Ajouter le défilement de la vue comme une sous-vue de la prolongation de la zone frappée par la vue, puis ajouter l'étendu de la zone frappée par la vue de votre viewcontroller.
Si je veux ajouter des boutons de défilement de la vue, ce qui signifie que je vais ajouter UIButtons à la zone d'extension de conteneurs dans les mêmes endroits que les photos, comment pourrais-je retourner le bon bouton pour le récepteur lorsqu'il est pressé?
avec le UIButtons, vous pourriez essayer de retourner [[[auto des sous-vues] objectAtIndex:0] hitTest:point withEvent:event] à la place. N'ai pas essayé, mais cela peut même être une bonne solution. Déléguer l'autorité à la scrollview.
Si
scrollView
a un en-tête ou le pied de page, votre solution ne fonctionne PAS.La réponse est de plus de 6 ans, pas surpris de voir certaines choses ont changé. Vous êtes invités à mettre à jour.
OriginalL'auteur picciano
Depuis iOS 5, il ya cette méthode du délégué:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
.De sorte que vous pouvez faire quelque chose comme ceci:
Pour les vitesses les plus élevées, vous pouvez ajuster votre targetContentOffset un peu différent, si vous voulez un plus vif sentiment.
OriginalL'auteur Johan Kool
J'ai eu le même problème et cela a très bien fonctionné pour moi, testé sur iOS 8.
J'ai eu à vérifier la vitesse et de toujours aller à la page suivante/précédente si la vitesse n'était pas à zéro, sinon il donnerait non-animés sauts quand on fait de très courte et rapide de glisse.
Mise à jour: Cela semble fonctionner encore mieux:
Ceux qui sont pour l'horizontale de la scrollview, utilisez
y
au lieu dex
pour un vertical.velocity
ne sera pas zéro.OriginalL'auteur Jonatan Liljedahl
J'ai beaucoup de différents points de vue à l'intérieur de défilement de l'affichage avec les boutons et le geste recognisers.
@picciano la réponse n'a pas fonctionné (défilement travaillé bien mais les boutons et les recognisers n'obtient pas de touche) pour moi, donc j'ai trouvé cette solution:
OriginalL'auteur eilas
J'ai eu du mal à surmonter ce problème, et j'ai trouvé une presque parfaite solution qui est d'idéal et la pagination de la largeur que vous voulez.
J'étais scrollView.isPaging à faux (en attendant, c'est à false par défaut) à partir de UIScrollView et l'ensemble de son délégué, à UIScrollViewDelegate.
diapositives contient toutes les vues de page que vous avez inséré à UIScrollView.
OriginalL'auteur steven_phanha
Après quelques jours de recherche et de dépannage, je suis venu avec quelque chose qui fonctionne pour moi!
Vous devez d'abord sous-classe de la vue que le scrollview, et de remplacer cette méthode par le suivant:
Alors toute la magie qui se passe dans la scrollview délégué méthodes
Vous devez également définir la scrollview de décélération. Je l'ai fait dans le ViewDidLoad
-[UIView beginAnimations:]
etc ont dans ce contexte? n'êtes-vous pas simplement de changer la valeur d'une struct, les modifications de Base de l'Animation ne verra jamais?OriginalL'auteur Alcides Eduardo Zelaya
alcides solution fonctionne parfaitement. je viens d'activer /désactiver le défilement de la scrollview, chaque fois que je entrer scrollviewDidEndDragging et scrollViewWillEndDragging. si l'utilisateur fait défiler plusieurs fois avant de la pagination de l'animation est terminée, les cellules sont légèrement hors de l'alignement.
j'ai donc:
OriginalL'auteur helkarli