Swift - viewControllers 之间的无限滚动

Posted

技术标签:

【中文标题】Swift - viewControllers 之间的无限滚动【英文标题】:Swift - infinite scroll between viewControllers 【发布时间】:2015-07-25 13:17:45 【问题描述】:

在我的 ViewController 中,我有一个 UIScrollView,它包含两个 viewController(AviewController 和 BviewController)。 滚动工作正常但是,我想添加一个无限循环,这意味着当滚动到达最后一个视图( BviewController )时,AviewController 应该是下一个,反之亦然。

找不到实现这一点的方法。有什么想法吗?

到目前为止,我在 viewDidLoad:

let storyboard = UIStoryboard(name: "Main", bundle: nil)

    let AviewController = storyboard.instantiateViewControllerWithIdentifier("A_id") as! AviewController;
    let BviewController = storyboard.instantiateViewControllerWithIdentifier("B_id") as! BviewController;

    scrollView!.contentSize = CGSizeMake(2*CGRectGetWidth(AviewController.view.frame), CGRectGetHeight(view.frame));

    let viewControllers = [AviewController, BviewController]

    var idx:Int = 0;

    for viewController in viewControllers 
        // index is the index within the array
        // participant is the real object contained in the array
        addChildViewController(viewController);
        let originX:CGFloat = CGFloat(idx) * CGRectGetWidth(scrollView!.frame);
        viewController.view.frame = CGRectMake(originX, 0, viewController.view.frame.size.width, viewController.view.frame.size.height);
        scrollView!.addSubview(viewController.view)
        viewController.didMoveToParentViewController(self)
        idx++;
    

【问题讨论】:

【参考方案1】:

一种覆盖 UIScrollView 的方法,将内容大小填充到比您的内容大得多,然后覆盖 layoutSubviews 以在您滚动时重新定位视图。

Apple 提供的示例如下:https://developer.apple.com/library/ios/samplecode/StreetScroller/Introduction/Intro.html

特别看InfiniteScrollView文件https://developer.apple.com/library/ios/samplecode/StreetScroller/Listings/StreetScroller_InfiniteScrollView_m.html

还有layoutSubviews 和recenterIfNecessary 方法。

【讨论】:

以上是关于Swift - viewControllers 之间的无限滚动的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 10.1 ViewController.h 与 ViewController.swift

Swift学习第三天之零散知识点

Swift:关闭 viewController 1 然后呈现 viewController 2

通过另一个 viewController 显示一个 viewController,Swift

如何将 ViewController.swift 连接到 Storyboard 中的 ViewController?

使用 Swift 呈现新的 Viewcontroller 后如何关闭以前的 Viewcontroller?