【问题标题】:scrollViewDidEndScrollingAnimation not getting calledscrollViewDidEndScrollingAnimation 没有被调用
【发布时间】:2013-01-21 10:23:57
【问题描述】:

我想在scrollview 完成滚动时执行一些操作,所以我在scrollViewDidEndScrollingAnimation 委托方法中编写了该操作。当矩形不可见并且滚动视图滚动到新矩形时,它工作正常。但是当 rect 已经可见时,scrollViewDidEndScrollingAnimation 方法将不会被调用,所以写在scrollViewDidEndScrollingAnimation 中的方法也不会被调用。但是我想调用那个动作,有没有人知道在scrollview完成滚动时如何调用那个方法?

提前致谢!

【问题讨论】:

    标签: ios uiscrollview


    【解决方案1】:

    我认为这个可以抓住一些人。实际发生的情况是,只有在显式调用 setContentOffset:animated:scrollRectToVisible:animated: 方法时才会调用 scrollViewDidEndScrollingAnimation

    正如UIScrollViewDelegate Protocol Reference 所说:

    讨论
    滚动视图在其结束时调用此方法 setContentOffset:animated: 的实现和 scrollRectToVisible:animated: 方法,但仅当动画是 请求

    那该怎么办?好吧,我们不要忘记滚动视图中内容数据的偏移通常不是动画的。相反,它是不断更新contentOffset 值的结果。因此,您可以使用scrollViewDidScroll: 委托方法基于特定的contentOffset 触发您的方法。

    或者,如果在每个滚动手势之后都要做一些事情 - 特别是在私人 UIScrollViewPanGestureRecognizer 之后 - 那么你可以在 scrollViewDidEndDecelerating: 中做它:

    讨论
    滚动视图调用这个方法当滚动 运动停止。 UIScrollView的减速属性 控制减速。

    【讨论】:

      【解决方案2】:

      同时实现scrollViewDidEndDecelerating:scrollViewDidEndDragging:

      -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
      {
          // User lifted finger while scrolling
          [self doPostScrollAction];
      }
      
      -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
      {
          if(!decelerate)
          {
              // User lifted finger after stopping scrolling
              [self doPostScrollAction];
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 2019-03-31
        • 2012-12-16
        相关资源
        最近更新 更多