【问题标题】:How would you implement the recycling of views during scrolling in an UIScrollView?在 UIScrollView 中滚动期间如何实现视图的回收?
【发布时间】:2009-05-07 19:19:31
【问题描述】:

嗯,有一个委托会在以下情况下被调用:

  • 滚动视图开始滚动
  • 初始化滚动动作后从滚动视图中抬起手指
  • 滚动视图停止减速

但现在的问题是,如果你想在滚动时回收那些视图,你必须在滚动时非常快地做到这一点。当用户滚动时,某些东西必须触发一个方法,该方法将从上到下或从下到上删除一个或三个视图。

问题:

  • 用户可能滚动非常慢或非常快。我不知道。

  • 一旦开始滚动,我必须检查,即每秒 50 次偏移量是多少,并确定是否该回收视图。下一个问题是,如何每秒调用 50 次方法,以及如何在滚动停止时停止。

你知道哪些模式可以解决这个问题?我相信那里有一些不错的。

【问题讨论】:

    标签: iphone cocoa-touch uikit uiscrollview


    【解决方案1】:

    表格视图非常适合这种事情,而且非常灵活。

    【讨论】:

    • 如果您想从左到右或向任何方向滚动,这不是很好。
    【解决方案2】:

    事实上,scrollViewDidScroll 方法是在滚动过程中连续调用的,而不是在手指抬起的时候。 (实际上,每次contentOffset 更改时都会调用它,无论是因为用户滚动还是程序更改。)因此您可以安全地使用它来回收视图。

    确保在距当前视图一个屏幕尺寸距离内预加载视图,因为用户可能会在一个手势中滚动一个屏幕宽度或高度距离。

    当然,如果您要垂直排列视图,UITableView 是您的朋友,它会为您进行回收。 (如果您有兴趣,它还支持可变高度行。)

    【讨论】:

    • 谢谢!也可能发生用户快速捕捉的情况,然后它会一次向下或向上滚动几页,直到它完成减速。我没有使用 UITableView,因为我需要在滚动视图中完全控制 UIImageView。也就是说,因为我已经实现了一些在滚动过程中发生的特殊效果。
    • 你是对的。我的意思是用户可以通过一次触摸滚动一个屏幕高度的数据,以便在该过程中不会调用您的委托。我相信您可以保证在用户滚动的每个屏幕高度至少收到一次对 scrollViewDidScroll 的调用。 (至少这是一个合理的假设。)当然,这些都是我们正在谈论的极端情况。
    • 顺便说一句,您能否更详细地解释一下您到底在做什么而无法使用表格视图完成?只是想知道。
    【解决方案3】:

    如果启用了分页,那么您的代理会收到一个

    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

    当滚动处于页面边界时,这是回收视图的好时机。否则,您将不得不监视委托中的内容偏移量

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView;

    并确定何时可以回收视图。

    【讨论】:

    • 谢谢!我使用了 - (void)scrollViewDidScroll:(UIScrollView *)scrollView;为此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2018-01-31
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多