问题
Is there a way to deactivate the decelerating of a UIScrollView?
I want to allow the user to scroll the canvas, but I don't want that the canvas continues scrolling after the user lifted the finger.
回答1:
This can be done by utilizing the UIScrollView
delegate method scrollViewWillBeginDecelerating
to automatically set the content offset to the current screen position.
To implement:
- Assign a delegate to your
UIScrollView
object if you have not already done so. In your delegate's
.m
implementation file, add the following lines of code:-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ [scrollView setContentOffset:scrollView.contentOffset animated:YES]; }
Voila! No more auto-scroll.
回答2:
For iOS 5.0 or later, there is a better method than calling setContentOffset:animated:
.
Implement delegate method scrollViewWillEndDragging:withVelocity:targetContentOffset:
in your .m
file:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset {
*targetContentOffset = scrollView.contentOffset;
}
Assigning the current offset to targetContentOffset
stops the UIScrollView
from auto-scrolling.
回答3:
You can just turn up the deceleration rate very high. With an infinite rate, it would stop immediately. Try setting the rate to these constants:
scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
and
scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
If fast still isn't fast enough for you, UIScrollViewDecelerationRateFast is just typedef'ed as a float, so you can just multiply it by a factor of 10 or so to speed it up even more.
回答4:
Just set the decelerationRate property to 0
It will disable the auto scrolling property. But keep in mind the user interaction will become bad if scrollview contentsize is big.
回答5:
Previously version code:↓
scrollView.decelerationRate = UIScrollView.DecelerationRate.fast
Current 4.2 version code:↓
scrollView.decelerationRate = UIScrollViewDecelerationRateFast
来源:https://stackoverflow.com/questions/1105647/deactivate-uiscrollview-decelerating