我已經解決了我的情況有點破解。對於每個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