Réglage contentOffset par programme déclenche scrollViewDidScroll
J'ai un peu de UIScrollView
sur une page. Vous pouvez faire défiler de manière indépendante ou de lock-ensemble et de les faire défiler comme un. Le problème se produit lorsqu'ils sont verrouillés.
- Je utiliser UIScrollViewDelegate
et scrollViewDidScroll:
de suivre le mouvement. J'ai une requête à la contentOffset
de la UIScrollView
qui a changé et puis reflètent les changements à d'autres de défilement des vues en définissant leurs contentOffset
propriété de match.
Génial.... sauf que j'ai remarqué que beaucoup d'appels supplémentaires. Programmation, en modifiant contentOffset
de mes défilement des vues déclenche la méthode du délégué scrollViewDidScroll:
à être appelé. J'ai essayé d'utiliser setContentOffset:animated:
à la place, mais je suis encore en train sur la gâchette de la déléguer.
Comment puis-je modifier mon contentOffsets programme, afin de ne pas déclencher scrollViewDidScroll:
?
Notes de mise en œuvre....
Chaque UIScrollView
fait partie d'une coutume UIView
qui utilise le modèle de délégué à l'appel retour à la présentation de UIViewController
sous-classe qui gère la coordination entre les différents contentOffset
valeurs.
- J'ai le même problème, je suis en utilisant un UITextView dans un UITableView, lors de l'affichage de texte est redimensionné, UITableView->scrollViewDidScroll est déclenché ;-(
- Carc réponse a parfaitement fonctionné. Depuis lors, je hae venu à comprendre la modification des limites de propriété et acquis une compréhension de ce qui se passe.
Vous devez vous connecter pour publier un commentaire.
Il est possible de modifier le contenu de l'offset d'une
UIScrollView
sans déclencher le délégué de rappelscrollViewDidScroll:
, en définissant les limites de laUIScrollView
à l'origine sur le contenu souhaité compenser.scrollViewDidScroll
. Est-il une situation, cela arriverait-il?Essayer
A fonctionné pour moi.
Qu'en utilisant les propriétés de UIScrollView?
UIScrollView
API a changé, même par l'ajout d'une nouvelle propriété, cela causerait votre code à briser. Vous devez également avoir à vous soucier de l'indicateur ces drapeaux être allé. Après tout, j'ai été vérifier dans "changer" et le défilement de l'affichage peut ne plus avoir le drapeau parce que l'action est terminée.Simplifier @Tak réponse, vous pouvez positionner le scrollview sans tirer
scrollViewDidScroll
dans une ligne comme ceci:scrollViewDidScroll
apparaît à feu.Une autre approche consiste à ajouter un peu de logique dans votre scrollViewDidScroll délégué à déterminer si oui ou non le changement de contenu de décalage a été déclenchée par programmation ou par le toucher de l'utilisateur.
Ce n'est pas une réponse directe à la question, mais si vous avez trouvé ce qui semble être des parasites tels messages, il peut être AUSSI parce que vous sont en train de changer les limites. Je suis à l'aide de certains Apple exemple de code avec un "tilePages" méthode qui supprime et ajoute de la sous-vue à un scrollview. Cette rarement des résultats supplémentaires dans les scrollViewDidScroll: messages appelé immédiatement, de sorte que vous obtenez dans un récursivité qui vous pour vous ne s'attendent pas. Dans mon cas, j'ai eu un méchant impossible de trouver la panne.
Ce que j'ai fait a été de files d'attente à l'appel sur la file d'attente principale: