私はややハックで私のケースを解決しました。ごとに、ズーム用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
}
}
基本的に、View Controller の開始前後に View Controller をロードします。これを行うには、それぞれを VC に設定して参照しsetViewControllers(_:direction:animated:completion:)
( ref を参照)、開始ビュー コントローラーに戻ります。なぜこれが2つの異なる機能にあるのですか? すべてを 1 つにまとめると、開始 VC の隣にある 2 つのビュー コントローラーのうちの 1 つだけが読み込まれます。これが望ましい場合もありますが、3 つの VC (前、開始、後) をすべてロードする必要がありました。
UIPageViewController
がすでにロードされている場合、このメソッドがどの程度うまく機能するかはわかりません。たとえば、数回スワイプした後、表示されているページから 2 ページをロードする必要がある場合。に入れると飛び跳ねることがありwillTransitionToViewControllers()
ます。