使用UICollectionViewControllers(Swift)实现UIPageViewController

时间:2015-08-20 18:38:07

标签: ios xcode swift uicollectionview uipageviewcontroller

我正在尝试实现UIPageViewController,您可以在两个UICollectionViewControllers之间滑动(非常类似于iOS 8.4音乐应用)。这也应该使用UINavigationController

的一个实例

这是我到目前为止所尝试的:

使用Storyboard,我添加了一个新的PageViewController,其中我符合UIPageViewControllerDataSource以及UIPageViewControllerDelegate协议。

使用Storyboard标识符,我已经成功地将其设置为可以在每个视图之间滑动的位置。

以下是一些更具体的示例代码:

override func viewDidLoad() {

    self.dataSource = self
    self.delegate = self

    let startingViewController = self.viewControllerAtIndex(index)
    let viewControllers: NSArray = [startingViewController]
    self.setViewControllers(viewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)

}

func viewControllerAtIndex(index: Int) -> UICollectionViewController! {

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

    if index == 0 {
        return storyBoard.instantiateViewControllerWithIdentifier("AlbumsController") as! UICollectionViewController
    }

    if index == 1 {         
        return storyBoard.instantiateViewControllerWithIdentifier("SubscriptionsController") as! UICollectionViewController
    }

    return nil
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

    let identifier = viewController.restorationIdentifier
    let index = self.identifiers.indexOfObject(identifier!)

    if index == identifiers.count - 1 {
        return nil
    }

    self.index = self.index + 1
    return self.viewControllerAtIndex(self.index)
}

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {

    let identifier = viewController.restorationIdentifier
    let index = self.identifiers.indexOfObject(identifier!)

    if index == 0 {
        return nil
    }

    self.index = self.index - 1
    return self.viewControllerAtIndex(self.index)
}

问题出现在滑动到下一个视图时手势丢失/被覆盖。最初我可以滚动第一个集合视图并点击状态栏滚动到顶部,但是一旦pageviewcontroller滑动到下一个集合视图,此手势就会停止工作,现在两个集合视图都不响应“滚动到顶部” “手势。

我也听说过使用滚动视图是可能的,但我不相信这种实现更适合使用UIPageViewController

目前的研究表明,手势受到PageViewController的“数据源”的影响,必须以某种方式进行更改。

我还在UIPageViewController内嵌了UINavigationController,以实现两个视图的共享导航栏。当然,导航栏与UICollectionViews重叠,因为它们本身并未嵌入UINavigationController。为了解决这个问题,我使用了以下代码:

collectionView.contentInset = UIEdgeInsets(顶部:64,左:0,底部:0,右:0)

有人能够就如何在新的音乐应用程序中正确地重新创建“在两个视图之间轻扫”效果给我一些建议吗? 通过我目前的实施,我觉得这不是实现目标的正确方法,所以我非常感谢任何帮助。

0 个答案:

没有答案