通过故事板逆转自定义搜索

Jac*_*cob 14 reverse objective-c storyboard ios segue

我有一个自定义segue动画,当将新的视图控制器推入堆栈时发生.然而,当弹出与所述自定义segue一起呈现的视图控制器时,默认导航控制器动画发生(即,当父视图控制器从左边缘在屏幕上翻译时,当前视图控制器向右动画).

所以我的问题是:有没有办法编写一个自定义的pop segue动画,当从视图控制器弹出堆栈时会发生这种情况?

编辑(解决方案):

我最终定义了一个类似于所选答案的自定义segue.在Storyboard中,我将一个自定义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];
  }];
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*.J. 19

是.这是一个我弹出顶级的例子.在Storyboard中创建segue时.使用select或在属性检查器中输入新的新segue类.

//
//  FlipTopPop.h

#import <UIKit/UIKit.h>


@interface FlipTopPopToRoot : UIStoryboardSegue

@end
Run Code Online (Sandbox Code Playgroud)

//  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
Run Code Online (Sandbox Code Playgroud)

如果您只想弹出一个级别更改,请使用此自定义segue:

//  PopSegue.h

#import <UIKit/UIKit.h>

@interface PopSegue : UIStoryboardSegue

@end
Run Code Online (Sandbox Code Playgroud)

//  PopSegue.m

#import "PopSegue.h"

@implementation PopSegue

- (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
    [src.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

@结束