Вопрос

У меня есть пользовательская анимация Segue, которая возникает при толчке нового контроллера представления в стек. Однако при вызове контроллера представления, который был представлен указанным пользовательским Segue, происходит анимация контроллера навигации по умолчанию (то есть текущий контроллер представления анимирует справа, в то время как контроллер родительского представления переводится на экране с левого края).

Итак, мой вопрос: есть ли способ написать пользовательскую анимацию Pop Segue Segue, которая происходит при выводе контроллера представления из стека?

Изменить (решение):

В итоге я определил пользовательский переход, похожий на выбранную ответ. В раскадровке я перетащил пользовательский переход от контроллера представления ребенка обратно к своему родителю, дал ему идентификатор и недавно написанный обратный переход в качестве класса. Да, я понимаю, что это практически идентично модальному переходу. Требования клиента потребовали это безумие, поэтому, прежде чем кто -либо комментирует, поймите, что я знаю, что не нужно делать это при нормальных обстоятельствах.

- (void)perform {
  UIViewController *src = (UIViewController *)self.sourceViewController;
  UIViewController *dest = (UIViewController *)self.destinationViewController;

  [UIView animateWithDuration:0.3 animations:^{
    CGRect f = src.view.frame;
    f.origin.y = f.size.height;
    src.view.frame = f;

  } completion:^(BOOL finished){
    src.view.alpha = 0;
    [src.navigationController popViewControllerAnimated:NO];
  }];
}
Это было полезно?

Решение

Да. Вот пример, в котором я выхожу на верхний уровень. Когда вы создаете переход в раскадровке. Используйте выберите или введите новый новый класс Segue в инспекторе атрибутов.

//
//  FlipTopPop.h

#import <UIKit/UIKit.h>


@interface FlipTopPopToRoot : UIStoryboardSegue

@end

а также

//  FlipTopPop.m

#import "FlipTopPopToRoot.h"

@implementation FlipTopPopToRoot

- (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
    [UIView transitionWithView:src.navigationController.view duration:0.5
                   options:UIViewAnimationOptionTransitionFlipFromBottom
                animations:^{
                    [src.navigationController popToViewController:[src.navigationController.viewControllers objectAtIndex:0] animated:NO];;
                }
                    completion:NULL];
}

@end

Если вы хотите появиться только на одном изменении уровня, используйте этот пользовательский переход:

//  PopSegue.h

#import <UIKit/UIKit.h>

@interface PopSegue : UIStoryboardSegue

@end

а также

//  PopSegue.m

#import "PopSegue.h"

@implementation PopSegue

- (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
    [src.navigationController popViewControllerAnimated:YES];
}

@конец

Другие советы

Для тех, кто следит за этим сейчас, iOS 7 позволяет оживить вас в обоих направлениях:

Установите Segue, чтобы натолкнуться, затем см. Код ниже для реализации push.

https://github.com/dzamir/oldstylenavigationcontrolleranimatedtransition

Как отметил комментатор Линус, другие представленные решения создадут еще один экземпляр UiviewController. Я думаю, что эта ссылка здесь описывает другие альтернативы, чтобы обеспечить анимацию обратного перехода.

http://robsprogramonkledge.blogspot.com/2012/05/back-segues.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top