0

我有一个自定义的转场:

-(void)perform {

    __block UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
    __block UIViewController *destinationController = (UIViewController*)[self destinationViewController];

    float duration = 0.5;

    NSLog(@"FlipSegue.m - source:%@ dest:%@", sourceViewController, destinationController);

     if (self.isUnwinding) {
         NSLog(@"FlipSegue.m - isUndwinding - Flipping View 2 to View 1");
         //[sourceViewController.navigationController dismissViewControllerAnimated:NO completion:nil];
         [UIView transitionWithView:sourceViewController.navigationController.view duration:duration
                            options:UIViewAnimationOptionTransitionFlipFromLeft
                         animations:^{
                             [sourceViewController.navigationController dismissViewControllerAnimated:NO completion:nil];
                         }
                         completion:NULL];
     } else {
         NSLog(@"FlipSegue.m - Going Forward - Flipping View 1 to View 2");
         //[sourceViewController.navigationController pushViewController:destinationController animated:NO];
         [UIView transitionWithView:sourceViewController.navigationController.view duration:duration
                            options:UIViewAnimationOptionTransitionFlipFromLeft
                         animations:^{
                             [sourceViewController.navigationController pushViewController:destinationController animated:NO];
                         }
                         completion:NULL];
     }

}

我已经设置segueunwind segue使用了storyboard.

我已经子类UINavigationController化并且正在使用自定义展开segue- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)

View 1当我从to调用 segue时View 2,它​​按预期工作。

当我调用 unwind segue 时,View 2翻转,但View 2再次显示。这isUnwinding部分代码会触发,但View 1不会再次出现。

任何有关如何解决此问题的提示将不胜感激。

4

2 回答 2

1

您是否在情节提要中设置了展开转场?

添加- (IBAction)unwind:(UIStoryboardSegue *)segue;ViewController 1. 转到 storyboard 中的 view2。Ctrl 从视图中拖动以退出。选择展开方式。转到情节提要中的大纲,然后单击您刚刚制作的展开转场。将其类更改为自定义 segue。

于 2015-01-07T17:48:11.463 回答
0

正如@JoshGafni 所建议的那样,我能够通过使用popToRootViewController和处理代码来解决这个问题。Push/Pop 正在工作,但如果不向现有代码添加其他问题,我无法让 Present/Dismiss 工作。

这是有效的最终结果:

if (self.isUnwinding) {
         NSLog(@"FlipSegue.m - isUndwinding - Flipping View 2 to View 1");

         [UIView transitionWithView:sourceViewController.navigationController.view
                           duration:duration
                            options:UIViewAnimationOptionTransitionFlipFromLeft
                         animations:^{
                             [sourceViewController.navigationController popToRootViewControllerAnimated:NO];
                         }
                         completion:nil];
     } else {
         NSLog(@"FlipSegue.m - Going Forward - Flipping View 1 to View 2");

         [UIView transitionWithView:sourceViewController.navigationController.view duration:duration
                            options:UIViewAnimationOptionTransitionFlipFromLeft
                         animations:^{
                             [sourceViewController.navigationController pushViewController:destinationController animated:NO];
                         }
                         completion:nil];
     }
于 2015-01-07T19:49:38.760 回答