更改UIScrollView滚动速度

时间:2010-01-07 01:02:50

标签: uiscrollview performance scroll

在我的应用程序中,我有一个视图,扩展UIScrollView并在用户滚动时填充其内容。但是,如果用户滚动得太快,则在UIScrollView中填充的视图不会按时创建,您实际上可以看到UIScrollView的背景。发生这种情况的原因是因为我在layoutSubviews中执行此延迟加载似乎每次更改contentOffset属性时都不会调用。

如果您慢慢滚动UIScrollView,则不会遇到上述问题并且内容加载得足够快。

我能想到的唯一解决这个问题的方法是,当用户从屏幕上抬起手指时,UIScrollView的滚动速度不会超过某个速度。

您知道更改decelerationRate属性不是我的解决方案。 DecelerationRate告诉UIScrollView用户抬起手指后停止滚动所需的速度。

2 个答案:

答案 0 :(得分:1)

scroll.pagingEnabled = YES;

答案 1 :(得分:0)

我有完全相同的问题。我用双向方法解决了它(iOS 8.3,Swift 1.2):

  1. 制备

    • 将scrollview委托添加到您的班级:

      class myCustomClassName:UIViewController,UIScrollViewDelegate
      {
      }
      
    • 让我的班级成为scrollview的代表:

      self.myScrollView.delegate = self
      
    • 添加了委托方法,我获取了contentOffset(滚动位置):

      func scrollViewDidScroll(scrollView: UIScrollView)
      {
          //some code...
      }
      
  2. 添加"内容范围"如果数据已经添加,则使用bool检查:

    func scrollViewDidScroll(scrollView: UIScrollView)
    {
        //Total products = TP
        if self.useScrollViewDynamicLoading
        {
            var scrollPosition:CGFloat = scrollView.contentOffset.y
            switch scrollPosition
            {
                case 200.0...300.0:
                //TP = 24
                if self.checkIfProductsInGivenRangeHaveAlreadyBeenAdded(18)
                {
                    loadProductsForProductRange(12)
                }
                case 600.0...700.0:
                //TP = 36
                if self.checkIfProductsInGivenRangeHaveAlreadyBeenAdded(24)
                {
                    loadProductsForProductRange(18)
                }
            }
            ....
    
  3. viewDidLoad()中更改了滚动视图减速率:

    self.myScrollView.decelerationRate = 0.5