Как сделать переход контроллера вида, когда выбранный вид остается на месте и исчезает

Как сделать переход контроллера вида, когда выбранный вид остается на месте и исчезает

Я заинтересован в выполнении перехода, когда это стандартный push-переход, но элемент fromViewController будет сохранять выбранный UIView поверх верхней части toViewController, в то время как toViewController вставляется на место. Я попытался высмеять это ниже.

Поля с левой стороны представляют UIViews и третий (коричневый - это тот, по которому щелкают. На средней фигуре fromViewController перемещается влево (накануне, когда вставляется toViewController. Выбранный UIView остается на месте и имеет анимацию, которая затухает.

Я не очень знаком с пользовательскими переходами, но думаю, что так оно и будет. Возможно, в контексте Контейнерного Контроллера, но, честно говоря, не совсем так. Любые идеи о том, как добиться этого эффекта? Я надеюсь, что можно также запустить эффект в обратном порядке, когда пользователь нажмет кнопку "Назад".

спасибо заранее

1 ответ

Это очень легко реализовать. Прежде всего, создайте пользовательский Контейнер Контроллер. Вам нужен стек контроллеров, похожих на навигационные контроллеры? Если да, реализация будет довольно сложной. Во всяком случае, это будет выглядеть примерно так:

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

}

Надеюсь, вам удастся сделать обратное самостоятельно.

Другие вопросы по тегам