如何自动制作UIPageViewController开关控制器

时间:2017-04-22 17:10:12

标签: ios swift3 uipageviewcontroller

我正在关注来自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 个答案:

答案 0 :(得分:0)

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

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