如何使用分页永久滚动UIScrollView?

时间:2010-09-26 14:39:38

标签: iphone uiscrollview

我有20个用户可以选择的项目。现在我想创建一个启用了分页的UIScrollView,它允许永久滚动。如果到达结尾,则附加开始,依此类推。

做这样的事情最简单的方法是什么?我担心当我达到y = 10000.0f的偏移时,它可能会影响记忆。不确定。

同样顺畅的“永久滚动体验”非常重要。因此,当达到结束时将偏移设置为0/0很可能无法正常工作......我记得我在一年前尝试过这种情况,并且UIScrollView将整个事情向后调整(错误的方向,从头到尾)偏移被设置为其他东西。

1 个答案:

答案 0 :(得分:3)

大偏移不会消耗额外的内存;它只需要CoreAnimation处理大量数据。这很好,除了......

CGFloat是设备上的浮动(IIRC,它是Mac OS X上的双倍)。这意味着它可以表示高达约2 24 (约1670万)的整数,因此半整数高达约800万(并且“视网膜显示”具有半尺寸像素)。如果用户滚动很远,那么你将失去准确性。我不确定这究竟发生在哪里。您可以尝试将contentSize和contentOffset设置为非常大的值并查看会发生什么。

如果你真的需要UIDatePicker风格的“永远”滚动,你有几个选择:

  • 实施自己的。这不是困难,性能不会 坏(我认为你得到一个scrollViewDidScroll:每帧回调)。
  • 使contentSize“足够大”(大约100万,但请注意它应该是页面大小的倍数),并且内容偏移在中间的某处。当用户停止滚动时,将contentOffset重置为middle-ish:
    • scrollViewDidEndDragging:willDecelerate:(但仅限于decelerate == NO
    • scrollViewDidEndDecelerating:
    • scrollViewDidEndScrollingAnimation:
    • scrollViewDidScrollToTop:(可能;我不确定它是否也会发送scrollViewDidEndScrollingAnimation)。

这意味着如果用户尝试非常努力(一百万iPhone“点”约为160米),用户可以达到最终并弹跳。哦,好吧。