使用重复的结束页面的无限 UIScrollView
Posted
技术标签:
【中文标题】使用重复的结束页面的无限 UIScrollView【英文标题】:Infinite UIScrollView using Duplicate End Pages 【发布时间】:2012-03-05 07:26:00 【问题描述】:我正在使用重复的结束页面实现无限 UIScrollView。具体来说,我有 3 个 ViewController,我将它们的视图作为子视图添加到 UIScrollView 内容中。所以实际上,UIScrollView 内容如下所示(V1 = Viewcontroller's View 1, V2, Viewcontroller's View 2, V3 = ViewController's View)
UIScrollView 的内容: [V3][V1][V2][V3][V1]
当用户从 V2 向右滚动到 V3 再到 V1 时,我使用“scrollRectToVisible”将 ScrollView 移动到 V1 的第二个位置,使其看起来无穷无尽。同样,当用户从 V2 向左滚动到 V1 到 V3 时,我将滚动视图移动到 V3 的第二个到最后一个位置。
在代码方面,这看起来像这样:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender
if (scrollView.contentOffset.x == 0)
// user is scrolling to leftwards and has reached the position 0 of the scrollview
[scrollView scrollRectToVisible:CGRectMake(960,0,scrollView.frame.size.width,scrollView.frame.size.height) animated:NO];
else if (scrollView.contentOffset.x == 1280)
// user is scrolling rightward and has reached the last position of the scrollview
[scrollView scrollRectToVisible:CGRectMake(320,0,scrollView.frame.size.width,scrollView.frame.size.height) animated:NO];
我在这里遇到的问题是 ViewControllers 中有 UITableViews。例如,V1 有一个 UITableView。如果用户已经到了 V1 的 UITableView 的第 10 行,我相信我需要在滚动视图中的 V1 视图之间同步 UITableView 的状态。
用户只看到最右边的 [V1] 一瞬间或当他们只将滚动视图拖到一半时,但如果状态不同步,他们仍然会注意到它不是同一个 TableView。
有没有办法解决这个问题?我认为的一种方法是保存状态,然后更新所有 V1 以便它们显示相同的内容。
是否可以让两个 UITableView 对象以某种方式自动相互镜像?
谢谢!
【问题讨论】:
【参考方案1】:你这么说:
如果用户已经到了 V1 的 UITableView 的第 10 行,我相信我需要在滚动视图中的 V1 视图之间同步 UITableView 的状态。
这意味着您有同一个 V1 ViewController 的多个实例。
是否可以让两个 UITableView 对象以某种方式自动相互镜像?
是的,在 NSUserDefaults 上使用 NSNotificationCenter 应该可以解决问题,但也许您可以做一些更有效的事情。
而不是使用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender
你可以试试
- (void)layoutSubviews
在特定条件下(通常是移动已经完全从屏幕上消失的 VC)只重新排列 3 个 VC(每个类一个实例)。因此您将节省 2 个 VC,并且不必处理同一个类的同步实例。
Apple 发布了一个关于无限滚动视图的精彩视频(WWDC 2011,Session 104 - Advanced Scroll View Techniques)。
希望这会有所帮助。祝你好运。
【讨论】:
谢谢,我试试看!以上是关于使用重复的结束页面的无限 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章
swift 4中的页面控制是不是可以有一个无限的水平分页uiscrollview?
Android studio自动horizontalscrollview无限滚动直到结束然后重复