I want to make paging/scrolling in UIScrollView to be faster, so when the user lefts his finger the next page will come faster than normal regardless the speed of the acceleration.
Asked
Active
Viewed 9,993 times
7
-
I've tried `decelerationRate` property but nothing changed. – 4mahmoud Feb 08 '13 at 20:42
2 Answers
12
Tweak the decelerationRate
of your UIScrollView.
More reading: UIScrollView Class Reference

Jeremy
- 8,902
- 2
- 36
- 44
-
`UIScrollViewDecelerationRateNormal`, `UIScrollViewDecelerationRateFast` – SwiftArchitect Jan 31 '17 at 22:26
6
If I understand your question correctly, you've setup the ScrollView to snap to pages (pagingEnabled = YES). When the the user lifts their finger you want it to snap to the closest page quicker than what it currently does?
If that's what you're trying to accomplish, this is what I recommend:
- DISABLE pagingEnabled (pagingEnabled = NO). We're going to do it ourselves.
- Setup some object (probably the ViewController) as a delegate of the scroll view.
- In the Scrollview delegate, override the method
scrollViewDidEndDragging:willDecelerate:
. You will also want to override the methodscrollViewWillEndDragging:withVelocity:targetContentOffset:
so that you can get the velocity of the drag. - In the
scrollViewDidEndDragging:willDecelerate:
, you can calculate the direction of the drag (using the velocity you got from the other method) and the offset to the nearest page. From there, it's as simple as setting the contentOffset of the scrollview using aUIView
animation block with the desired duration. For example:
[UIView animateWithDuration:.25f animations:^{
scrollview.contentOffset = calculatedCGPoint;
}];
That should give you the desired effect.

Aaron Hayman
- 8,492
- 2
- 36
- 63