如何进行视图控制器转换,其中所选视图保持原位并淡出

时间:2014-08-07 13:17:03

标签: ios ios7 uikit-transitions

如何进行视图控制器转换,其中所选视图保持原位并淡出

我感兴趣的是进行标准推送转换的转换,但是当toViewController滑入到位时,fromViewController会将选定的UIView保留在toViewController的顶部。我试着在下面嘲笑这个。

左侧的方框代表UIViews,第三个方框(褐色的one_是被点击的方框。在中间的图中,fromViewController向左滑动(当toViewController滑入时前夕。选定的UIView保持不变在适当的位置,并有一个淡出它的动画。

enter image description here

我对自定义转换并不熟悉,但我认为这是如何完成的。可能在容器视图控制器的上下文中,但是,不是那么肯定。关于如何实现这种效果的任何想法?我希望当用户点击“后退”时,也可以反向运行效果。按钮。

事先提前

1 个答案:

答案 0 :(得分:0)

实施起来非常容易。首先,创建一个自定义容器控制器。你需要类似导航控制器的控制器堆栈吗?如果是,实施将变得更加复杂。无论如何,它看起来像这样:

- (void)showViewController:(UIViewController *)viewController
              selectedView:(UIView *)selectedView
{
    // Tell prev. controller about pending removing
    [_currentController willMoveToParentViewController:nil];

    // Add the next controller
    [self addChildViewController:viewController];

    // Move selected view to the Containers view
    [self.view addSubview:selectedView];

    // Add toView below fromView
    [self.view insertSubview:viewController.view 
                belowSubview:_currentController.view];

    // Animate whatever you need
    [UIView animateWithDuration:0.25
                     animations:^
     {
         // Move from view
         CGPoint fromViewCenter = viewController.view.center;
         fromViewCenter.x = -0.5 * viewController.view.frame.size.width;
         viewController.view.center = fromViewCenter;

         // Fade out the selected view 
         selectedView.alpha = 0;
     }
                     completion:^
     {
         // Clean
         [_currentController.view removeFromSuperview];

         // Finally remove prev. controller from the hierarchy
         [_currentController removeFromParentViewController];

         // Notify 
         [viewController didMoveToParentViewController:self];
     }];

}

希望你能自己扭转局面。