如何拥有一个无界的UIScrollView

时间:2010-02-18 22:38:29

标签: iphone uiscrollview

我希望能够构建一个能够滚动无限(无限)距离的滚动视图(这是第一个问题,如何使用contentSize属性执行此操作)。这样做的原因是我可以实现滚动日历视图,用户可以使用该视图沿单个轴滚动时间。

现在,我需要在其中放置一个视图,以便在滚动时标记日期。我的第二个问题是如何在滚动视图中实现这样的视图。我可以有一个长视图,比滚动视图框架宽3或4倍,只需重新定位和更新,每次滚动停止,伪造连续栏。还有其他想法吗?

谢谢!

4 个答案:

答案 0 :(得分:2)

我知道你发布这个问题已经有一段时间了,但仅供将来参考:

在WWDC 2011上,Apple发表了精彩的演讲,名为“Session 104 - Advanced Scroll View Techniques”。该视频可以从developer.apple.com或iTunes中看到。

主要概念:

1 - 从一个大于scrollView边界的子视图开始。

2 - 在scrollView的-layoutSubViews中,检查您想要无限滚动的方向的contentOffset是否超过了您指定的某个阈值(这不一定是任何特定值,它可能是1点极端)。

3 - 如果是这种情况,则将contentOffset重置为零,并将子视图的帧调整相同的数量。

最后两个步骤发生在同一个运行循环周期内,因此转换将不可见。请注意,scrollBar会跳转。但是,由于你的scrollView是无限的,滚动条无论如何都没有视觉反馈,所以当你完成它时你最好隐藏它们。

答案 1 :(得分:0)

不确定它可以......你可以试试CGSizeZero

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/occ/instp/UIScrollView/contentSize

   contentSize

    The size of the content view. @property(nonatomic) CGSize contentSize Discussion

    The unit of size is points. The default size is CGSizeZero.

真正的问题是,你真的想要“无限”或者你想要大部分无限,只是让视图不大吗?或者你想要自动调整大小。

还是一个无限滚动视图的连续栏?酒吧永远不会移动,因为它不会接近开始或结束...你可以做一个向右拖动的栏将进入未来并将其向左拖动将返回然后总是将它重新定位在中心......除此之外我不知道这里有什么意义。

答案 2 :(得分:0)

Looping UIScrollView Horizontally听起来像是同一类问题,希望我的评论可能会给你一些想法。

答案 3 :(得分:0)

制作“无限”滚动视图不起作用 - 内存要求过大。做到这一点的最好方法就是伪造它。

3 screen scrollview:

|---|---|---|
|   |   |   | 
|---|---|---|

制作一个与一个屏幕一样大的滚动视图,然后当用户完成滚动到滚动视图的下一个三分之一时,将滚动位置移回到中间的第三个并将内容向左移动。这种情况发生得如此之快以至于没有可见的反馈给用户滚动视图&内容刚刚被重新播放。

同样,当用户滚动回第一个三分之一时,将滚动位置更改为中间三分之一,并将所有内容移到右侧。

对于内存管理,您应该只加载适合这三个屏幕的内容。当您滚动到下一个三分之一时,您将重新定位,并加载下一个内容屏幕。