objective-c - 带分页和动量的 UITableView

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

观察结果

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

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

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

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

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


期望的行为/问题

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

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

我还发现我无法使用动画样式 UIViewAnimationCurveEaseOut 将 ScrollView 设置为预定内容偏移量的动画,因为 setContentOffset:animated: 不采用选项: 参数。否则我会“假装”滚动到我预先计算的内容偏移量。

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

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


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

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


插图

Example 1或者 Example 2

最佳答案

所以这个答案是通过#iphonedev IRC channel 上一位狡猾但聪明的用户获得的!

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

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

关于objective-c - 带分页和动量的 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284392/

相关文章:

objective-c - 呈现模态视图 Controller 隐藏导航栏

ios - 如何确定某个位置是否在 UIbezierPath 内?

ios - 单元格标签在表格滚动之前不会调整大小

ios - 在 TableView 中仅显示第一个单元格

ios - UILabel 的字体颜色没有改变

iphone - MPMoviePlayerController - 如何阻止它隐藏其他项目?

objective-c - 检测 UIView 是否与其他 UIView 相交

iphone - 对象dealloc仅在iOS 4.3中崩溃

iphone - UILabel 值不会在 cellForRowAtIndexPath 中更新?

ios - 滚动时 UITableViewCell detailTextLabel 消失