【问题标题】:UITableView w/ paging & momentum带有分页和动量的 UITableView
【发布时间】:2013-04-29 17:10:24
【问题描述】:

观察

我发现了一些关于 UITableViews / UIScrollViews 在您抬起手指后如何在 iOS 的 Objective-C 中滚动的“奇怪”事情:

  • 滚动视图的“速度”(如scrollViewWillEndDragging:withVelocity:targetContentOffset:)不是基于时间,而是基于“渲染”或“帧刷新”等;即,“速度”为 3.0 意味着滚动视图将在下一次刷新之前滚动 3.0 点,此时如果“速度”仍为 3.0,它将再滚动 3.0 点。 (相对于基于时间的绝对速度)

  • “刷新”大约发生。每秒 950 次,但这会有所不同且不可靠。 (同样,与基于时间的绝对刷新率相比)

  • 因为 UIScrollViews 以指数方式而非线性方式减速,decelerationRate 是一个几何常数。这意味着在滚动视图的每次“刷新”时,其“速度”都会设置为之前的速度乘以“减速率”。

  • 在某些时候,滚动视图的速度接近于零,以至于它停止滚动。我还不确定这个阈值是多少。


期望的行为/问题

我推导出了一个方程,理论上可以求解该方程以调整减速率,以便滚动视图可以随动量自然滚动,并足够靠近表格视图单元格的顶部以模拟“分页”。 (我还在scrollViewDidEndDragging:willDecelerate: 中添加了一个动画,以最小化调整内容偏移量。调整内容偏移量而不调整 decelerationRate 看起来很奇怪;滚动视图要么向前跳跃,要么突然向后倾斜。)

这个等式是:Ad^n + Bd + C = 0 其中 d = decelerationRate。理想情况下,我想要 d(n, A, B, C) 形式的东西,但我的数学博士朋友告诉我,这在确定性上是不可能的。他将我指向以下页面:http://en.wikipedia.org/wiki/Root-finding_algorithm

我还发现我无法使用动画样式 UIViewAnimationCurveEaseOut 将滚动视图动画到预定的内容偏移量,因为 setContentOffset:animated: 不采用 options: 参数。否则我会“伪造”滚动到我预先计算的内容偏移量。

(我在 SO 上找到了这个,但它对我不起作用:UIScrollview setContentOffset with non linear animation ?

我想使用表格视图,因为滚动视图中的所有元素本质上都是单元格,而表格视图最适合显示单元格列表。然而,基于我难以获得我想要的行为,我可能只是制作一个分页滚动视图,这可能会更容易。然后我可以限制在我的自定义“表格视图”中可见的“单元格”的数量,或者根据需要在事后加载它们。


您有什么想法/想法/建议?

到目前为止,我还没有找到我想要的现有示例。


插图

【问题讨论】:

    标签: objective-c cocoa-touch uitableview uiscrollview scroll-paging


    【解决方案1】:

    所以这个答案是通过#iphonedev IRC 频道上一位尖刻但聪明的用户获得的!

    scrollViewWillEndDragging:withVelocity:targetContentOffset: 中,您可以通过*targetContentOffset = newTargetOffset; 将targetContentOffset 重新设置为您想要的任何值!令人难以置信的简单和优雅。

    我的错误是试图从scrollViewWillEndDragging:withVelocity:targetContentOffset: 中调用[scrollview setContentOffset:newTargetOffset animated:YES],这根本不起作用,因此我开始以更复杂的方式“解决”我的问题,但也根本不起作用.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2021-03-31
      相关资源
      最近更新 更多