【问题标题】:Trying To Unwind a Custom Segue Using UIViewAnimationOptionTransitionFlipFromLeft尝试使用 UIViewAnimationOptionTransitionFlipFromLeft 展开自定义 Segue
【发布时间】:2015-01-07 17:34:10
【问题描述】:

我有一个自定义的转场:

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

}

我已经使用storyboard 设置了segueunwind segue

我已将UINavigationController 子类化,并且正在使用- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *) 获得自定义展开转场

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

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

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

【问题讨论】:

    标签: ios objective-c segue uistoryboardsegue unwind-segue


    【解决方案1】:

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

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

    【讨论】:

    • - (IBAction)unwind:(UIStoryboardSegue *)segue 不是进入 ViewController 1 吗?
    • 我注意到从 View1 到 View2,您使用的是 pushViewController,但从 View2 到 View1,您使用的是dismissViewController。 pushViewController 的反义词是 popViewController,dismissViewController 的反义词是 presentViewCONtroller。也许你正在混合它们? Dismiss 和 Present 用于模态序列。
    • 越来越近了...将dismissViewController 更改为popToRootViewController 几乎可以让我到达那里。屏幕翻转,继续显示View 2,但随后弹出View 1。似乎我需要在翻转它之前让它弹出。如果我将popToRootViewController 放在transitionWithView:duration:... 之前,它会正确弹出到View 1,但不显示动画。
    • 我可能在这里找到了答案stackoverflow.com/questions/3602434/…
    【解决方案2】:

    正如@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];
         }
    

    【讨论】:

    • 很高兴它成功了!我不介意在某个地方投赞成票:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多