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

时间:2012-02-16 17:40:20

标签: objective-c ios storyboard reverse 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];
  }];
}

3 个答案:

答案 0 :(得分:19)

是。这是一个我弹出顶级的例子。在Storyboard中创建segue时。使用select或在属性检查器中输入新的新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

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

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

@end

答案 1 :(得分:1)

对于现在关注此项目的任何人,iOS 7都可以让您以两种方式进行动画处理:

将segue设置为Push,然后查看下面的代码以进行推送实现。

https://github.com/Dzamir/OldStyleNavigationControllerAnimatedTransition

答案 2 :(得分:-1)

正如Linus指出的那样,提出的其他解决方案将创建另一个UIViewController实例。我认为这里的链接描述了启用反向segue动画的其他替代方法。

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