14

我有一个自定义的 segue 动画,当将新的视图控制器推入堆栈时会发生这种动画。然而,当弹出带有所述自定义 segue 的视图控制器时,会发生默认的导航控制器动画(即,当前视图控制器动画向右,而父视图控制器从左边缘在屏幕上平移)。

所以我的问题是:有没有办法编写一个自定义的弹出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];
  }];
}
4

3 回答 3

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

@结尾

于 2012-02-16T18:25:03.630 回答
1

对于现在关注此内容的任何人,iOS 7 允许您以两种方式制作动画:

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

https://github.com/Dzamir/OldStyleNavigationControllerAnimatedTransition

于 2013-10-03T05:04:39.327 回答
-1

正如评论者 Linus 所指出的,所提出的其他解决方案将创建 UIViewController 的另一个实例。我认为此处的此链接描述了启用反向转场动画的其他替代方法。

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

于 2012-07-02T22:14:43.247 回答