web-dev-qa-db-fra.com

Désactiver la décélération d'UIScrollView

Existe-t-il un moyen de désactiver le ralentissement d'un UIScrollView?

Je veux permettre à l'utilisateur de faire défiler le canevas, mais je ne veux pas que le canevas continue de défiler une fois que l'utilisateur a levé le doigt.

36
Markus Müller

Cela peut être fait en utilisant la méthode de délégué UIScrollViewscrollViewWillBeginDecelerating pour définir automatiquement le contenu du décalage à la position actuelle de l'écran. 

Implémenter: 

  1. Affectez un délégué à votre objet UIScrollView si vous ne l'avez pas déjà fait.
  2. Dans le fichier d'implémentation .m de votre délégué, ajoutez les lignes de code suivantes:

    -(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{  
        [scrollView setContentOffset:scrollView.contentOffset animated:YES];   
    }
    

Voila! Plus de défilement automatique. 

63
Mark

Pour iOS 5.0 ou version ultérieure, il existe une meilleure méthode que d'appeler setContentOffset:animated:.

Implémentez la méthode déléguée scrollViewWillEndDragging:withVelocity:targetContentOffset: dans votre fichier .m:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
                     withVelocity:(CGPoint)velocity
              targetContentOffset:(inout CGPoint *)targetContentOffset {
    *targetContentOffset = scrollView.contentOffset;
}

L'affectation du décalage actuel à targetContentOffset arrête la UIScrollView du défilement automatique.

38
Quotation

Vous pouvez simplement augmenter le taux de décélération très haut. Avec un taux infini, il s’arrêterait immédiatement. Essayez de régler le taux sur ces constantes: 

scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;

et 

scrollView.decelerationRate = UIScrollViewDecelerationRateFast;

Si fast n'est toujours pas assez rapide pour vous, UIScrollViewDecelerationRateFast est simplement typé comme un float, vous pouvez donc le multiplier par 10 ou plus pour l'accélérer encore plus.

19
Dan Lorenc

Il suffit de définir la propriété decelerationRate à 0

Cela désactivera la propriété de défilement automatique. Mais gardez à l'esprit que l'interaction de l'utilisateur deviendra mauvaise si scrollview contentsize est volumineux.

0
Emtiyaj Ali