【问题标题】:Endless iPad Swipe?无休止的 iPad 滑动?
【发布时间】:2025-11-29 14:55:02
【问题描述】:

我想实现一个 ipad 视图,我在其中解析一个 xml 文件并将条目并排放置在一个“无尽”的 ipad 视图上,所以你必须左右滑动它。有人可以告诉我如何实现这个吗?我必须使用哪种类型的视图?

提前致谢

问候

【问题讨论】:

    标签: iphone cocoa-touch uikit ipad swipe


    【解决方案1】:

    使用非常大的contentSize 不是可行的方法。 contentSize 仍然使用固定数据类型,如果您滚动足够长的时间,它们会溢出,充其量,您的绘图会变得混乱。最糟糕的情况是,您的应用会崩溃。

    您想要的是通过使用窗口来给人一种无限滚动的印象。我将通过一个简单的一维示例来说明它是如何工作的,但您可以轻松地将其扩展到二维。

    假设您有 3 个条目,每个条目都填写 UIScrollView。向右滚动,它似乎是这样排列的:

    A B C A B C A B C ...
    

    在内部,您将像这样安排它们:

    C A B C
    

    因为当 A 可见时,向右滑动可以看到 C 的一部分,向左滑动可以看到 B 的一部分。

    您的UIScrollViewcontentOffset 是您的窗口。虽然contentSize 包含所有四个实体的宽度 (C A B C),但在内部您将其限制为实际宽度的 75%。当您的用户左右滚动时,您调整contentOffset,使其永远不会为负数或超过contentSize.width 的75%。这是在您的代表内部完成的,在scrollViewDidScroll:

    - (void) scrollViewDidScroll:(UIScrollView *)scrollView
    {
        while (scrollView.contentOffset.x < 0)
            scrollView.contentOffset.x += constrainedContentSize.width;
        while (scrollView.contentOffset.x > constrainedContentSize.width)
            scrollView.contentOffset.x -= constrainedContentSize.width;
    
        // ...
    }
    

    请注意,这假定了一个实例变量 constrainedContentSize,很可能在您的 UIScrollView 所在视图的控制器中,并且控制器是您的 UIScrollView 委托。

    这将比不断发布和重新创建视图更有效。

    【讨论】:

      【解决方案2】:

      您使用启用了分页的 UIScrollView。要点是将 myscrollView.contentSize 设置为所有页面的总宽度,但在滚动发生时及时创建各个页面(请参阅 UIScrollViewDelegate 文档);换句话说,当您只需要三个视图时,您不希望实际上有几十个或更多视图耗尽内存——当前视图以及前一个和下一个视图。这个来自苹果的示例代码应该让你开始: http://developer.apple.com/iphone/library/samplecode/Scrolling/Introduction/Intro.html

      【讨论】: