将计时器设置为 UIPageViewController [英] Set timer to UIPageViewController
问题描述
我试图让 UIPageViewController
每 5 秒浏览一次页面.如何在 Swift 中执行此操作?
I'm trying to have the UIPageViewController
navigate through the pages for every 5 seconds. How to do this in Swift?
有什么方法可以显式调用viewControllerAfterViewController
?
Is there any way to explicitly call 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
}
推荐答案
我认为保留计数器的代码的问题在于它没有考虑手动滚动的 pageViewController 或计数器不同步.
I think the problem with the code keeping a counter is that it doesn't account for the pageViewController being manually scrolled as well or the counter goes out of sync.
我花了比我想象的更多的时间来试图弄清楚这个场景,目前有以下工作.我本以为这是苹果会提供的基本功能.
I've spent more time than I would have thought trying to figure this scenario out and currently have the following working. I would have thought this was a basic function apple would provide.
- 首先,我在为内容创建的每个 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() 取自正常设置,如下所示:
The getItemController() is taken from the normal setup and looks like:
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 秒发生一次的计时器是:
For the record... the timer to happen every 5 seconds is:
private var timer: NSTimer = NSTimer()
override func viewDidLoad() {
super.viewDidLoad()
createPageViewController()
timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: Selector("advancePage"), userInfo: nil, repeats: true)
}
这篇关于将计时器设置为 UIPageViewController的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!