如何执行没有过渡动画的segue

vor*_*max 29 iphone storyboard ipad ios

我有一个以导航控制器开始的应用程序.该导航控制器可以打开模态视图控制器:

- (void)openModalController:(id)sender
{
    [self performSegueWithIdentifier:@"SegueIdentifier"];
}
Run Code Online (Sandbox Code Playgroud)

但是当用户使用url方案打开应用程序时,我想在打开模态控制器的情况下显示应用程序.所以我添加了一些方法并尝试:

// Controller

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated]; // animated == NO in initial loading 

    if (_shouldOpenModalController) {
        [self openModalController:nil];
    }
}

- (void)setShouldOpenModalController:(BOOL)flag
{
    _shouldOpenModalController = flag;
}

// AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (launchOptions) {
        UINavigationController *nc = (UINavigationController *)self.window.rootViewController;
        MyViewController *c = (MyViewController *)[ns topViewController];
        [c setShouldOpenModalController];
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这里有一个问题:openModalController:我在故事板中设置了过渡动画.如何在没有动画的情况下完成?这项任务还有另一种方法吗?

Gor*_*ove 42

在Storyboard中复制您的segue,并为第二个提供不同的ID.

然后,您可以更改新版本中的转换.

  • 您不需要自定义segue,模态转换上有一个"动画"复选框. (18认同)
  • 尝试在同一个视图和VC之间创建一个新的segue只替换现有的segue ...至少在Xcode 6.1上(不使用size-classes) (3认同)
  • 要创建一个更多的segue以尝试跳过它上面的过渡动画...必须有其他方式,我宁愿手动打开视图控制器,而不是创建没有动画的自定义segue过渡. (2认同)

kei*_*ics 29

 self.performSegueWithIdentifier("loginSegue",sender: nil)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


k06*_*06a 8

我正在使用此代码段来请求授权viewDidLoad:

[UIView setAnimationsEnabled:NO];
self.view.hidden = YES;

[self performSegueWithIdentifier:@"segue_auth" sender:self];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [UIView setAnimationsEnabled:YES];
    self.view.hidden = NO;
});
Run Code Online (Sandbox Code Playgroud)

授权后,我可以根据需要设置后向过渡动画.

  • 此解决方案适用于Xcode 6+,其他则不适用(不允许重复复制). (2认同)

Sha*_*lam 6

还有一种方法

YourViewController *aYourViewController = [self.storyboard   instantiateViewControllerWithIdentifier:@"aYourViewControllerIdentifier"];
[self.navigationController pushViewController:aYourViewController animated:NO];
Run Code Online (Sandbox Code Playgroud)

@"aYourViewControllerIdentifier"在故事板中添加到视图控制器.

  • 这更像是一种匆忙。如果我们已经有一个 segue,我们不应该通过代码实例化视图控制器。使用 segue 的全部意义在于避免在代码中实例化视图控制器。 (2认同)