将定时器设置为UIPageViewController
问题描述:
我试图让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
}
答
我想用代码保持计数器的问题是,它不占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
几乎是重复的,但不确定它是否计为重复swift:http://stackoverflow.com/questions/7208871/is-it-possible-to-turn-page-programmatically-in-uipageviewcontroller – danh 2015-03-31 00:41:48
但是,在obj -c我需要它在迅速..我可以得到页面移动但不是底部的小点 – 2015-03-31 02:36:46
这就是为什么我没有投票结束。在你的更新方法中,提前页码并调用setViewControllers:direction:animated:completion :.如果有效,则回答问题,如果不是的话,那就是需要在SO上进行审查的代码。粘贴在这里。 – danh 2015-03-31 02:40:09