使用三个视图的无限循环分页 UIScrollView

Posted

技术标签:

【中文标题】使用三个视图的无限循环分页 UIScrollView【英文标题】:Paginating UIScrollView with infinite loop of three views 【发布时间】:2011-07-22 11:07:19 【问题描述】:

我想创建一个具有三个常量视图的UIScrollView。中间视图应始终在最初显示。当用户向右滚动时,视图 1 将成为活动视图,而其他两个视图将像循环一样移动:视图 3 现在将在左侧,而视图 2 在右侧。附图说明了我想要什么:

这可能吗?

【问题讨论】:

【参考方案1】:

仅 3 页

有时您可能想要一个无限的页面循环,但又不想 加载大量内容。例如,您可能有很多 在 UIScrollView 中显示的内容。装载大量 数据不会有理想的方法来处理这种情况。

逻辑 我们可以在那里使用的是将 UIScrollView 保持在三个页面上。 数据会加载到每个页面上,用户会一直在看 中间页的数据。当用户滚动到新页面时, 每个页面的内容将被重置,偏移量将返回 用户返回查看中间页面。这样即使你可能 有大量数据要滚动浏览,并非全部加载 一次。一次只能加载三个页面。

...取自http://iosdevelopertips.com/user-interface/creating-circular-and-infinite-uiscrollviews.html

【讨论】:

【参考方案2】:

让您的滚动视图连续显示 5 个视图。将第一个视图视图 3 设置为下一个 1、2、3、1。在您想要的位置启动 Scrollview。

【讨论】:

【参考方案3】:

很有可能。您可以继承 UIScrollView 并在其 - (id)init 方法中删除类似的内容。

int numberOfPages = 3;

// For ease in referencing sizes
CGFloat portalHeight = self.frame.size.height;
CGFloat portalWidth = self.frame.size.width;

self.contentSize = CGSizeMake(self.frame.size.width * numberOf Pages, self.frame.size.height);

self.contentOffset = CGPointZero;

// Needed to lock scrolling to pages
self.pagingEnabled = YES;

// Setup pages
for (NSUInteger i = 0; i < numberOfPages; i++) 
    // Add subviews here

编辑:我可能不完全理解你的问题。这些应该是可以连续循环的视图“轮播”吗?

【讨论】:

【参考方案4】:

scroll3.contentOffset = CGPointMake(scroll3.frame.size.width*2, 0);

【讨论】:

以上是关于使用三个视图的无限循环分页 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

当没有更多数据时如何停止无限循环(分页)

如何在 SwiftUI 或无限列表视图中实现列表分页?

UIScrollView与分页的联合使用

ScrollView分页-无限循环

带有 uiscrollview 分页的 iOS 渐变动画

在 SwiftUI 中使用 onAppear 时出现无限循环