我正在使用重复的结束页面实现无限的UIScrollView。具体来说,我有3个ViewControllers,我将其视图添加为UIScrollView内容的子视图。实际上,UIScrollView内容如下所示(V1 = Viewcontroller' View 1,V2,Viewcontroller' View 2,V3 = ViewController')
UIScrollView的内容: [V3] [V1] [V2] [V3] [V1]
当用户从V2向右滚动到V3到V1时,我使用" scrollRectToVisible"在第二个位置将ScrollView转换为V1,使它看起来无穷无尽。同样,当用户从V2向左滚动到V1到V3时,我将滚动视图移动到V3的第2位到最后位置。
Codewise,这看起来像这样:
- (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对象以某种方式自动镜像?
谢谢!
答案 0 :(得分: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 - 高级滚动视图技术)。
希望这会有所帮助。祝你好运。