我最近设置了一个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
非常感谢任何帮助。
答案 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)
}
您还可以稍微简化before
和after
方法:
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]
}