【发布时间】:2025-11-29 14:55:02
【问题描述】:
我想实现一个 ipad 视图,我在其中解析一个 xml 文件并将条目并排放置在一个“无尽”的 ipad 视图上,所以你必须左右滑动它。有人可以告诉我如何实现这个吗?我必须使用哪种类型的视图?
提前致谢
问候
【问题讨论】:
标签: iphone cocoa-touch uikit ipad swipe
我想实现一个 ipad 视图,我在其中解析一个 xml 文件并将条目并排放置在一个“无尽”的 ipad 视图上,所以你必须左右滑动它。有人可以告诉我如何实现这个吗?我必须使用哪种类型的视图?
提前致谢
问候
【问题讨论】:
标签: iphone cocoa-touch uikit ipad swipe
使用非常大的contentSize 不是可行的方法。 contentSize 仍然使用固定数据类型,如果您滚动足够长的时间,它们会溢出,充其量,您的绘图会变得混乱。最糟糕的情况是,您的应用会崩溃。
您想要的是通过使用窗口来给人一种无限滚动的印象。我将通过一个简单的一维示例来说明它是如何工作的,但您可以轻松地将其扩展到二维。
假设您有 3 个条目,每个条目都填写 UIScrollView。向右滚动,它似乎是这样排列的:
A B C A B C A B C ...
在内部,您将像这样安排它们:
C A B C
因为当 A 可见时,向右滑动可以看到 C 的一部分,向左滑动可以看到 B 的一部分。
您的UIScrollView 的contentOffset 是您的窗口。虽然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 委托。
这将比不断发布和重新创建视图更有效。
【讨论】:
您使用启用了分页的 UIScrollView。要点是将 myscrollView.contentSize 设置为所有页面的总宽度,但在滚动发生时及时创建各个页面(请参阅 UIScrollViewDelegate 文档);换句话说,当您只需要三个视图时,您不希望实际上有几十个或更多视图耗尽内存——当前视图以及前一个和下一个视图。这个来自苹果的示例代码应该让你开始: http://developer.apple.com/iphone/library/samplecode/Scrolling/Introduction/Intro.html
【讨论】: