Deactivate UIScrollView decelerating

眉间皱痕 提交于 2019-11-27 12:35:49
Mark

This can be done by utilizing the UIScrollView delegate method scrollViewWillBeginDecelerating to automatically set the content offset to the current screen position.

To implement:

  1. Assign a delegate to your UIScrollView object if you have not already done so.
  2. 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.

Quotation

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.

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.

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.

Previously version code:↓

scrollView.decelerationRate = UIScrollView.DecelerationRate.fast

Current 4.2 version code:↓

scrollView.decelerationRate = UIScrollViewDecelerationRateFast

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!