2015-03-31 28 views
1

我試圖讓UIPageViewController每隔5秒瀏覽一次頁面。如何在Swift中做到這一點?將定時器設置爲UIPageViewController

有什麼辦法可以明確地打電話給viewControllerAfterViewController

var timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: Selector("update"), userInfo: nil, repeats: true) 

    func update() -> UIViewController { 
       // can u please tell me what to add here 
    } 



func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? 
{ 

    var index = (viewController as tourViewControllerhelper).pageIndex 

    if (index == 0) || (index == NSNotFound) { 
     return viewControllerAtIndex(4) 
    } 

    index-- 
    pageCounter-- 
    return viewControllerAtIndex(index) 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? 
{ 

    var index = (viewController as tourViewControllerhelper).pageIndex 

    if (index == NSNotFound || index == 4) { 
     return viewControllerAtIndex(0) 
    } 

    index++ 
    pageCounter++ 

    return viewControllerAtIndex(index) 
} 
func viewControllerAtIndex(index: Int) -> tourViewControllerhelper? 
{ 
    if self.pageTitles == 0 || index >= self.pageTitles 
    { 
     return nil 
    } 


    // Create a new view controller and pass suitable data. 
    let pageContentViewController = tourViewControllerhelper() 

    pageContentViewController.titleText = tourTextDescription[index] 
    pageContentViewController.pageIndex = index 
    currentIndex = index 

    println("xyz") 
    return pageContentViewController 
} 
+0

幾乎是重複的,但不確定它是否計爲重複swift:http://stackoverflow.com/questions/7208871/is-it-possible-to-turn-page-programmatically-in-uipageviewcontroller – danh 2015-03-31 00:41:48

+0

但是,在obj -c我需要它在迅速..我可以得到頁面移動但不是底部的小點 – 2015-03-31 02:36:46

+0

這就是爲什麼我沒有投票結束。在你的更新方法中,提前頁碼並調用setViewControllers:direction:animated:completion :.如果有效,則回答問題,如果不是的話,那就是需要在SO上進行審查的代碼。粘貼在這裏。 – danh 2015-03-31 02:40:09

回答

4

我想用代碼保持計數器的問題是,它不佔pageViewController被手動滾動以及或櫃檯熄滅同步。

我花了比我想象的更多的時間想出這個場景,目前有以下工作。我原以爲這是蘋果提供的基本功能。

  • 首先,我爲每個爲內容創建的ViewController設置了itemIndex屬性。
  • 其次,查詢childViewController的索引。
  • 然後轉到索引+ 1。

功能:

func advancePage() { 
    let pvcs = pageViewController?.childViewControllers as! [PageContentViewController] 
    let itemIndex = pvcs[0].itemIndex 
    let firstController = getItemController(itemIndex+1)! 
    let startingViewControllers = [firstController] 
    pageViewController!.setViewControllers(startingViewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) 
} 

的getItemController()從正常設置拍攝,看起來像:

private func getItemController(itemIndex: Int) -> PageContentViewController? { 

    if itemIndex < contentImages.count { 
     let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("PageContentViewController") as! PageContentViewController 
     pageItemController.itemIndex = itemIndex 
     pageItemController.imageName = contentImages[itemIndex] 
     return pageItemController 
    } 

    return nil 
} 

爲了記錄...計時器每5秒:

private var timer: NSTimer = NSTimer() 
override func viewDidLoad() { 
    super.viewDidLoad() 
    createPageViewController() 
    timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: Selector("advancePage"), userInfo: nil, repeats: true) 
} 
+0

優秀的答案。唯一的問題是,我在每個屏幕上都播放了一個視頻,並且轉換有點「時髦」,但是這個代碼工作得很好。 – damianesteban 2016-01-30 21:26:09

相關問題