J'ai un UIScrollView et je veux qu'il soit capable de défiler dans les deux directions (c'est le cas actuellement) mais seulement un à la fois. Ainsi, par exemple, si vous commencez à le faire défiler horizontalement, il ne bougera pas verticalement du tout jusqu'à ce que vous le lâchiez et que vous commenciez à le déplacer verticalement. Comment pourrais-je faire cela?UIScrollView défilement dans une seule direction à la fois
Répondre
Définissez la propriété directionalLockEnabled
sur YES. À partir des documents Apple:
Si cette propriété est NON, le défilement est autorisé dans les directions horizontale et verticale. Si cette propriété est OUI et que l'utilisateur commence à faire glisser dans une direction générale (horizontalement ou verticalement), la vue déroulante désactive le défilement dans l'autre sens. Si la direction de déplacement est en diagonale, le défilement ne sera pas verrouillé et l'utilisateur pourra faire glisser dans n'importe quelle direction jusqu'à ce que la glissade soit terminée. La valeur par défaut est NO
La réponse acceptée pour cette question n'est pas entièrement correcte. Selon la documentation actuelle pour directionalLockEnabled
(tel que cité dans la réponse originale):
Si la direction de glissement est diagonale, puis le défilement ne sera pas verrouillé et l'utilisateur peut glisser dans toutes les directions jusqu'à ce que le déplacement se termine.
J'ai trouvé que c'était le cas moi-même. Si la direction initiale du glissement est plus proche d'un angle de 45 degrés entre les axes x et y, le verrouillage directionnel échoue. Si vous faites glisser plus ou moins horizontalement ou verticalement, le verrouillage s'active.
Pour un chemin d'y véritable verrouillage uniaxiale, voir ce lien: http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html
la manière simple d'y parvenir est de définir la directionalLockEnabled
-YES
et mettre en œuvre le délégué UIScrollerView comme celui-ci
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.x != 0 &&
scrollView.contentOffset.y != 0) {
scrollView.contentOffset = CGPointMake(0, 0);
}
}
Très simple et fonctionne très bien. Je vous remercie. –
Cela a fonctionné pour moi basé sur @Joe xi réponse. Swift 3,0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 {
scrollView.contentOffset = CGPoint(x: 0, y: 0)
}
}
- 1. comment déplacer une direction dans UIScrollView lors du défilement
- 2. iOS UIScrollView taille enfant vue une seule fois
- 3. Détecter la direction de UIScrollView défiler dans scrollViewWillBeginDragging
- 4. temps SVG dans une seule direction
- 5. UIScrollView à l'intérieur de UIScrollView: Défilement
- 6. Direction UIScrollView à partir de scrollViewWillBeginDecelerating
- 7. Horizontalement div extensible dans une seule direction
- 8. Modifier la direction de défilement
- 9. Déplacement UIScrollview lors du défilement
- 10. Position fixe dans une seule direction
- 11. Comment faire pour faire UIScrollView zoom dans une seule direction lors de l'utilisation de mise en page automatique
- 12. Fire jQuery événement de défilement une seule fois
- 13. Défilement par programme d'un UIScrollView
- 14. Obtenir la direction de défilement dans un scrollview?
- 15. Détection de défilement UIScrollView
- 16. concernant le défilement à l'intérieur de UIScrollView
- 17. Comment limiter la largeur de défilement UIScrollView?
- 18. Couleur de défilement UIScrollView?
- 19. UIScrollView Détecter le défilement
- 20. défilement de l'image dans UIScrollView dans l'iphone
- 21. Shader et Texture défilement selon la direction
- 22. Comment empêcher le défilement dans une direction dans un HorizontalFieldManager?
- 23. UIScrollView dilatoire quand défilement
- 24. Limiter la zone de défilement uiscrollview
- 25. Changer la direction de défilement avec raccourci
- 26. Barre de défilement/Direction numéro
- 27. UIScrollview Défilement horizontal et vertical
- 28. UIScrollView problème de défilement
- 29. une seule case cochée à la fois dans jquery
- 30. Une seule connexion à la fois dans phpwebsocket
Huh, je mets cette propriété dans IB mais il ne fonctionnait pas. Cela n'a fonctionné que par programme. Merci! – Letrstotheprez
J'ai ajouté ceci à: - (void) scrollViewDidEndDecelerating: (UIScrollView *) scrollView a travaillé pour moi. Et ajouté: scrollView.directionalLockEnabled dans la fonction. Quand j'ai lu cette réponse, il m'a fallu un peu de temps pour réaliser à quoi j'ajoutais la directionLockEnabled et où je l'ajoutais –