我已经解决了我的情况有点破解。对于每个ContentView
,我有一个UIScrollView
内的UIImageView
用于缩放。我的问题是,在启动应用程序时,如果用户在刷卡之前放大,在放大时进入下一页将无法正常工作。我使用下面的代码(Swift 1.2)来解决这个问题。正如我所说的那样,这虽然有些破绽。
var layoutsubs = false
override func viewDidLoad() {
super.viewDidLoad()
//Other code for implementing pageViewController omitted
//add pageViewController to main view
self.addChildViewController(pageViewController)
self.view.addSubview(pageViewController.view)
pageViewController.didMoveToParentViewController(self)
//Load to the viewController after the starting VC, then go back to the starting VC
var viewControllers = [afterVC]
pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Forward, animated: true, completion: nil)
viewControllers = [startingVC]
pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Reverse, animated: true, completion: nil)
}
override func viewWillLayoutSubviews() {
//Load the viewController before the starting VC then go back to the starting VC
//viewWillLayoutSubviews() is called multiple times, so do this only once
if !layoutsubs {
let startingVC = self.viewControllerAtIndex(imageIndex) as ContentViewController
let beforeVC = pageViewController(pageViewController, viewControllerBeforeViewController: startingVC) as! ContentViewController
var viewControllers = [beforeVC]
pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Reverse, animated: true, completion: nil)
viewControllers = [startingVC]
pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Forward, animated: true, completion: nil)
layoutsubs = true
}
}
本质上,我加载视图控制器之前和之后的起始视图控制器。我通过将每个设置为VC来通过setViewControllers(_:direction:animated:completion:)
(see ref)来查看,然后返回到起始视图控制器。为什么这是两个不同的功能?那么,如果你把它放在一个,那么只有启动VC旁边的两个视图控制器中的一个会加载。这对某些情况可能是需要的,但我需要所有三个VC(加载之前,开始和之后)。
我不确定如果UIPageViewController
已经被加载,这个方法可以工作多好。例如,如果您需要将页面2加载离开正在查看的页面,则需要几次滑动。如果你把它放在willTransitionToViewControllers()
中,它可能会跳过。
您是否找到了解决方案?我有同样的问题,滑到下一个视图控制器时会显着滞后。 – mattsson 2014-02-20 09:23:20
排序,但答案是非常具体的我的实施。正如我在发布这个问题后与UIPageViewController合作过很多,我发现这是一个非常棘手的问题。基本上,我的问题更多的是与查询数据库查询正确的数据有关,这会减慢每个页面的速度。我能够通过预先计算数据库中的数据,并使用自动布局绘制视图而不是混乱框架来优化页面轮换 - 这对我们有很大的帮助。其次我有很多的图像显示,所以我直接在“主”视图控制器(滑动的父)将它们存储在一个NSMutableArray中。 – DiscDev 2014-02-20 15:41:46
我的“解决方案”最终成为......不断等待苹果公司推出更快的手机......哈哈哈。在iPhone 6/6s上,不再有延迟。我优化了一些数据库抓取代码,当页面控制器第一次创建时会发生一次并且帮助了很多,但主要的速度改进来自更快的处理器和更多的RAM,并且逐步取消对iPhone 4/4s的支持=) – DiscDev 2015-10-12 19:05:46