在Swift中使用PageViewController设置NSTimer

时间:2016-04-26 04:43:43

标签: ios xcode swift uipageviewcontroller

我最近设置了一个class Foo { public: std::vector<int> & vector() { // Note we now return by non-const reference return vector_; } void afterChange() { // Other operations which need to be done after the // vector_ member has changed } private: std::vector<int> vector_; }; ,其ContainerView循环浏览视图(图片),作为我所拥有的PageViewController之上的一种横幅。现在,我很难将其挂钩到TableView(这样它会自动循环浏览视图/图像)。一切都有效,除了我试图连接的计时器部分。我试图转换一些NSTimer教程/ SO问题,但仍然有困难。

我已经看过这个:Set timer to UIPageViewController,但我无法获得提供给我的代码(也没有任何变体)。

请参阅下面的代码:

Objective-C

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

几点说明:

1)一般的想法是你需要在一个合理的位置设置一个计时器 - viewWillAppear是一个公共位置,记得在视图为no时使其无效更长的显示(如viewWillDisappear)。如果不这样做可能会导致内存增长,因为运行循环对目标有强引用 - 在本例中为self。我建议您将NSTimer.scheduledTimer...次调用移至viewWillAppear

2)上面的animation代码非常简单。基本上,你需要获得当前的&#34;页面&#34;,找出下一页&#34;页面&#34;应该是,然后让你的UIPageViewController显示下一个&#34;页面&#34;。

func animation() {
    guard let currentViewController = viewControllers?.first else {
        return
    }

    // Use delegate method to retrieve the next view controller
    guard let nextViewController = pageViewController(self, viewControllerAfterViewController: currentViewController) else {
        return
    }
    setViewControllers([nextViewController], direction: .Forward, animated: true, completion: nil)
}

您还可以稍微简化beforeafter方法:

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
    guard let i = orderedViewControllers.indexOf(viewController) else {
        return nil
    }
    let nextIndex = (i + 1) % AutoAnimatingPageViewController.colors.count
    return orderedViewControllers[nextIndex]
}

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
    guard let i = orderedViewControllers.indexOf(viewController) else {
        return nil
    }
    let prevIndex = (i - 1) < 0 ? AutoAnimatingPageViewController.colors.count - 1 : (i - 1)
    return orderedViewControllers[prevIndex]
}