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.
Cela peut être fait en utilisant la méthode de délégué UIScrollView
scrollViewWillBeginDecelerating
pour définir automatiquement le contenu du décalage à la position actuelle de l'écran.
Implémenter:
UIScrollView
si vous ne l'avez pas déjà fait.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.
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.
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.
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.