使用重复的结束页面的无限 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自动horizo​​ntalscrollview无限滚动直到结束然后重复

如何同步无限的 UIScrollView?

在 Swift 中使用 UIScrollView 进行无限循环滚动

UIScrollView 无限滚动 setContentOffset