Détecter la direction de UIScrollView de défilement dans scrollViewWillBeginDragging
Je n'ai google assez, & je n'ai vérifier les messages comme ceux-ci ( Trouver le sens de défilement dans une UIScrollView? ) dans stackoverflow avant de poster cette. J'ai un nombre dynamique de photos dans une Application iPhone, qui suis l'affichage par UIScrollView
. À aucun moment, je n'ai que 3 photos affichées dans le défilement de l'affichage. Quand j'ai, disons 4 photos, au total:
1ère photo : affiche offset 0.0
2ème photo : affiche offset 320.0
3ème photo : affiche offset 640.0
Maintenant, lorsque l'utilisateur passe à la 4ème photo, le défilement de la vue réinitialise à 0,0 décalage. Si l'utilisateur essaie de se défiler au-delà de la 4ème photo, le défilement devrait s'arrêter à la seule direction (de sorte que l'utilisateur n'a pas de défilement "au-delà"). Mais actuellement, l'utilisateur " est " en mesure de faire défiler au-delà de la dernière photo ; cependant, je détecte par programmation & réinitialiser le décalage. Mais il n'a pas l'air soignée, que l'utilisateur voit le fond noir momentanément. Je veux détecter que l'utilisateur a commencé à défilement de droite "(rappelez-vous, le défilement de "gauche" c'est à dire le "précédent" de la photo est d'accord) dans scrollViewWillBeginDragging
, afin que je puisse cesser de défilement vers la droite.
Ce que j'ai essayé:
- Essayez d'utiliser
self.scrollView.panGestureRecognizer
's
translationInView
ne fonctionne pas, car il n'est pas
panGestureRecognizer
instance retournée en premier lieu (!),
si le UIScrollView API de revendications. - La détection de cette dans
scrollViewDidEndDecelerating
est possible, bien que
ça va pas servir ma raison d'être.
Vous devez vous connecter pour publier un commentaire.
Je n'avais pas de déterminer la direction dans
scrollViewWillBeginDragging
lors de la vérification du défilement de la vuepanGestureRecognizer
:Je l'ai trouvé très utile en annulation de défilement lors de la première de glisser-déplacer lorsque l'utilisateur est en tirant dans un sens interdit.
scrollViewDidScroll
au lieutranslation > 0
- UP!Pour swift 2.0+ & ios 8.0+
Swift 3 Solution
1 - Ajouter UIScrollViewDelegate
2 - Ajoutez ce code
Merci, Kris. C'est ce qui a fonctionné pour moi, enfin:
C'est ce que j'ai utilisé et il fonctionne très bien, au moins sur iOS 6.0:
Vous permet d'économiser de la variable d'instance pour
lastContentOffset
...Prendre un coup d'oeil à
scrollViewWillEndDragging:withVelocity:targetContentOffset:
.Vous pouvez utiliser cette méthode ne faire aucune vérification et de voir si elle va là où il ne devrait pas et ensuite, dans la méthode, vous pouvez définir un nouveau
targetContentOffset
.Par la documentation:
Il semble y avoir des problèmes avec la détection de la direction de défilement basée sur la traduction de la scrollView pan de reconnaissance dans iOS 7+. Cela semble fonctionner assez transparente pour mes fins
scrollView.panGestureRecognizer translationInView:scrollView
ne signalent pas quelque chose d'utile dansscrollViewWillBeginDragging
dans iOS 7.Ce n':
Dans le
@interface
et:
et:
Construction de @Oscar de la réponse, vous pouvez faire des choses comme
scrollView.bounces = actualPosition.y < 0
si vous voulez la scrollView pour rebondir lorsque vous faites défiler vers le bas, mais pas lorsque vous faites défiler vers le haut