【问题标题】:(iphone) force scrollViewDidEndDecelerating to be called after programmatically scrolling a view?(iphone)以编程方式滚动视图后强制调用scrollViewDidEndDecelerating?
【发布时间】:2011-06-05 07:51:30
【问题描述】:

我用scrollRectToVisible:animated:为滚动设置动画

但是scrollViewDidEndDecelerating 没有被调用。

有没有办法强制调用函数?

【问题讨论】:

    标签: iphone animation uiscrollview


    【解决方案1】:

    scrollViewDidEndDecelerating 不会被 scrollRectToVisiblesetContentOffset 调用(即,以编程方式滚动)。如果您在头文件中注意到此方法的声明,它清楚地提到它是“在我们移动时调用”。

    现在,为了解决您的问题,将调用 scrollViewDidEndScrollingAnimation 委托(对于 setContentOffsetscrollRectToVisible),您可以使用它。

    【讨论】:

    • KKK4SO: scrollViewDidEndDeceleration 不会被调用 scrollRectToVisible scrollViewDidEndScrollingAnimation 不会被调用来进行实际手指滚动,这正常吗?
    • @Eugene:是的,很正常。 scrollViewDidScroll:delegate 对两者都有响应。
    【解决方案2】:

    正如您所发现的,scrollViewDidEndDecelerating 并不总是被调用(如果您用手指移动滚动视图并使其停止,它也不会被调用)。

    由于scrollViewDidEndDecelerating 是一个委托方法,您可以像这样强制调用它:

    [[scrollView delegate] scrollViewDidEndDecelerating:scrollView];
    

    【讨论】:

    • OMFG 谢谢!我在 QA 无法重现错误的情况下来回走动,结果我只是滚动屏幕的方式与他们不同:)
    • 你在哪里叫这个?
    【解决方案3】:

    我通过从 scrollViewDidEndScrollingAnimation

    调用 scrollViewDidEndDecelerating 解决了这个问题
    -(void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
    {
        [self scrollViewDidEndDecelerating:scrollView];
    }
    
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {
        //your code
    }
    

    【讨论】:

    • 如果您同时使用手动滚动和编程滚动(即使用setContentOffSet),这是否也有效? IE。如果你有这种格式,手动滚动不会scrollViewDidEndDecelerating被调用两次?
    【解决方案4】:

    添加下面的代码解决了我的问题。

    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        if !decelerate {
            scrollViewDidEndDecelerating(scrollView)
        }
    }
    

    【讨论】:

      【解决方案5】:
      1. 使用scrollView.delegate

      2. 对于非常流畅的视图动画,您应该添加一个委托函数。

      func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate, decelerate: Bool)  { 
          if decelerate == false {
              scrollViewDidEndDecelerating(scrollView)
          }
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-22
        • 1970-01-01
        • 2013-05-01
        • 1970-01-01
        • 2011-05-22
        • 1970-01-01
        • 2011-12-13
        相关资源
        最近更新 更多