如何让 UIPageViewController 自动切换控制器

Posted

技术标签:

【中文标题】如何让 UIPageViewController 自动切换控制器【英文标题】:How to make UIPageViewController switch controllers automatically 【发布时间】:2017-04-22 17:10:12 【问题描述】:

我正在关注 Duc Tran 关于 UIPageViewController 的精彩教程。我想知道如何在不让用户滑动的情况下使 UIPageViewController 中的控制器自动转换。这就是代码在没有委托和数据源的情况下的样子。

class AnimesPageVC: UIPageViewController 
override var navigationOrientation: UIPageViewControllerNavigationOrientation return .horizontal

weak var pageViewControllerDelegate: AnimePagesVCDelegate?

var timeInterval: Int?

var images: [UIImage]?


lazy var animes: [UIViewController] = 
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    var animes = [UIViewController]()

    if let images = self.images 
        for image in images 
            let anime = storyboard.instantiateViewController(withIdentifier: "AnimeImage")

            animes.append(anime)
        
    
    self.pageViewControllerDelegate?.setUpPageController(numberOfPages: animes.count)

    return animes
()

override func viewDidLoad() 
    super.viewDidLoad()

    delegate = self
    dataSource = self

    loadPage(atIndex: 0)


func loadPage(atIndex: Int) 
    let anime = animes[atIndex]
    var direction = UIPageViewControllerNavigationDirection.forward
    if let currentAnime = viewControllers?.first 
        if let currentIndex = animes.index(of: currentAnime) 
            if currentIndex > atIndex 
                direction = .reverse
            
        
    

    configurePages(viewController: anime)

    setViewControllers([anime], direction: direction, animated: true, completion: nil)


func configurePages(viewController: UIViewController) 
    for (index, animeVC) in animes.enumerated() 
        if viewController === animeVC 
            if let anime = viewController as? AnimeVC 
                anime.image = self.images?[index]
                self.pageViewControllerDelegate?.turnPageController(to: index)
            
        
    
  

那么我怎么能得到这种行为。将不胜感激任何帮助。 :)

【问题讨论】:

【参考方案1】:

在视图中添加一个计时器确实加载并使用更新的索引调用相同的加载函数

Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true)  (_) in
        // call your function here
        self.loadPage(atIndex: index + 1)
        // you have to update your index also.
        self.index = self.index + 1
    

这将每 0.3 秒调用一次 loadPage 函数

请记住,如果您只进入下一页,我的解决方案仅适用于一种方式,因为我自动添加它不会返回到之前的控制器,因为您已经执行了类似的操作

index = index - 1

【讨论】:

谢谢哈立德,它工作。但是,它只在第一次工作。它从第一个控制器切换到第二个控制器,但不会切换到下一个控制器。它也停留在第二个控制器上,所以如果我尝试滑动到下一个或上一个控制器,它会返回到第二个控制器。 因为你现在也必须更新你的索引,你的索引是 0,你加 1。你必须保持你的索引也更新,这样它才能工作。我正在编辑答案,以便您查看

以上是关于如何让 UIPageViewController 自动切换控制器的主要内容,如果未能解决你的问题,请参考以下文章

旋转到横向时如何让 UIPageViewController 工作?

如何让 UIPageViewController 使用过渡样式滚动?

如何让 UIPageViewController 知道我的异步下载何时完成?

如何设置 UIPageViewController(分页类型)手势委托

如何使 UIPageViewController 像 tableview 重用单元一样重用控制器?

如何在UIPageViewController顶部添加按钮?