更改UIScrollView滚动速度

问题描述:

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

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

我能想到的唯一解决这个问题的方法是让UIScrollView在用户从屏幕上抬起手指时不会比一定的速度更快地滚动。

就这样,您知道更改decelerationRate属性不是我的解决方案。 DecelerationRate指示UIScrollView在用户抬起手指后需要停止滚动的速度。

由于事先

FBR

+0

为什么不/你不能做苹果在地图和Safari浏览器应用程序中做什么,只显示卸载内容的抽象背景? – Jonathan 2010-01-07 01:42:38

+0

我当然可以做到这一点,但在这个应用程序中看起来不太好。 – ForeignerBR 2010-01-07 19:25:09

+0

你有没有找到解决方案? – 2010-11-17 20:23:46

scroll.pagingEnabled = YES;

我有完全相同的问题。我有一个双向的方式(iOS 8.3版本,雨燕1.2)解决了这个问题:

  1. 准备

    • 滚动视图委托添加到您的类:

      class myCustomClassName:UIViewController,UIScrollViewDelegate 
      { 
      } 
      
    • 使我的班scrollview的代表:

      self.myScrollView.delegate = self 
      
    • 添加委托方法,其中我得到的contentOffset(滚动位置):用布尔检查

      func scrollViewDidScroll(scrollView: UIScrollView) 
      { 
          //some code... 
      } 
      
  2. 增加了 “内容范围”,如果数据已经beend加入:

    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