我已经通过某种方式解决了我的问题。对于每个ContentView
, 我有一个UIImageView
在一个UIScrollView
用于缩放。我的问题是,启动应用程序时,如果用户在滑动之前进行缩放,则在放大时进入下一页效果不太好。我使用以下代码(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 https://developer.apple.com/library/prerelease/ios//documentation/UIKit/Reference/UIPageViewControllerClassReferenceClassRef/index.html#//apple_ref/occ/instm/UIPageViewController/setViewControllers:direction:animated:completion:),然后返回到起始视图控制器。为什么这在两个不同的函数中?好吧,如果将所有内容合二为一,则只会加载起始 VC 旁边的两个视图控制器之一。这对于某些情况可能是理想的,但我需要加载所有三个 VC(之前、开始和之后)。
我不确定如果该方法的效果如何UIPageViewController
已经加载了。例如,如果您需要在几次滑动后从正在查看的页面加载页面 2。如果你把它放进去,它可能会跳过willTransitionToViewControllers()
.