UIPageViewController:Viewcontrollers之间的淡入/淡出动画?

时间:2014-09-14 19:57:23

标签: ios objective-c uiviewcontroller uipageviewcontroller uianimation

我按照@ http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/上的教程来实现UIPageViewController。当用户在它们之间滚动时,我需要在视图控制器之间进行转换以淡入/淡出。

执行此操作的应用的示例是https://itunes.apple.com/us/app/tapiture/id645402534?mt=8

4 个答案:

答案 0 :(得分:9)

使用委托pageViewController:willTransitionToViewControllers:。这是在手势开始时调用的。你知道旧的视图控制器是什么,因为它已经存在。您知道新视图控制器是什么,因为此消息告诉您。因此,您可以访问他们的观点。因此,您可以更改其视图的alpha。

手势可能会被取消,但是pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:会告诉您这一点,因此您可以重新修复现有视图的Alpha。

如果您不喜欢这种方法,那么您将不得不继承UIPageViewController的子类,或编写您自己的父视图控制器来执行相同的操作。优点是您可以直接访问滚动视图,并可以自己跟踪滚动。在几年前的WWDC视频中讨论了写“无限卷轴视图”;我写了一个,但是当UIPageViewController采用滚动样式时我放弃了它。

答案 1 :(得分:0)

使用@matt的建议,以及我最终如何实现它:

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *>
*)pendingViewControllers {

    _nextVC = [pendingViewControllers objectAtIndex:0];

}

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(nonnull NSArray<UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed {
    if (completed)
    {
        [_welcomeBackground setImage:[NSString stringWithFormat:@"welcome_intro_image_%d", _nextVC.view.tag]] 
    } 
}

我们检查已完成以确保用户实际转到下一页,然后根据存储在其标签属性中的_nextVC索引为该页面设置正确的图像。

答案 2 :(得分:0)

使用自定义SCPageViewController并淡化pageViewController中的视图:didNavigateToOffset:delegate方法

答案 3 :(得分:-1)

这包含在界面构建器

中的默认过渡样式中