尝试使用 UIViewAnimationOptionTransitionFlipFromLeft 展开自定义 Segue

Posted

技术标签:

【中文标题】尝试使用 UIViewAnimationOptionTransitionFlipFromLeft 展开自定义 Segue【英文标题】:Trying To Unwind a Custom Segue Using UIViewAnimationOptionTransitionFlipFromLeft 【发布时间】: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 不会再次出现。

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

【问题讨论】:

【参考方案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,但不显示动画。 我可能在这里找到了答案***.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];
     

【讨论】:

很高兴它成功了!我不介意在某个地方投赞成票:)

以上是关于尝试使用 UIViewAnimationOptionTransitionFlipFromLeft 展开自定义 Segue的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用堆叠小部件构建布局

尝试使用 Curl 登录网站

不安全的 JavaScript 尝试使用框架访问

当我尝试使用 ansible ping 我的 VM 时,它会尝试 ping 服务器 ID 而不是 IP

尝试使用 ConfigurationBuilder 但得到 FileLoadException

尝试使用 Jquery 更改 HTML [重复]