使用重复结束页面的无限UIScrollView

时间:2012-03-05 07:26:01

标签: uitableview uiscrollview

我正在使用重复的结束页面实现无限的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对象以某种方式自动镜像?

谢谢!

1 个答案:

答案 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 - 高级滚动视图技术)。

希望这会有所帮助。祝你好运。