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