0

我有兴趣做一个转换,它是一个标准的推送转换,但是 fromViewController 将在 toViewController 滑动到位时将选定的 UIView 保留在 toViewController 的顶部。我试图在下面模拟这个。

左侧的框代表 UIViews 和第三个(棕色的一个_是被点击的那个。在中间的图中,fromViewController 向左滑动(当 toViewController 滑入时,被选中的 UIView 保持原位并且有一个淡出它的动画。

在此处输入图像描述

我对自定义过渡不太熟悉,但我认为这就是它的完成方式。可能在 Container View Controller 的上下文中,但老实说,不太确定。关于如何实现这种效果的任何想法?我希望当用户点击“返回”按钮时,也可以反向运行效果。

4

1 回答 1

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];
     }];

}

希望你能自己扭转局面。

于 2014-08-07T13:45:32.720 回答