【问题标题】:Source view controller hides during custom segue源视图控制器在自定义 segue 期间隐藏
【发布时间】:2012-07-28 00:35:50
【问题描述】:

我正在尝试制作自定义 segue,以便目标视图控制器从顶部向下滑动。

我根据the documentation的示例编写了我的代码。

问题是当segue执行时,源视图控制器变黑,然后出现动画。如何防止源视图控制器变黑?

(我已经尝试实现this answer 中提出的解决方案,但屏幕要么在转换后变黑,要么恢复到源视图控制器。)

这是我的代码:

-(void)perform{

    UIViewController *splashScreen = self.sourceViewController;
    UIViewController *mainScreen = self.destinationViewController;

    //Place the destination VC above the visible area        
    mainScreen.view.center = CGPointMake(mainScreen.view.center.x,
                                          mainScreen.view.center.y-600);

    //Animation to move the VC down into the visible area
    [UIView animateWithDuration:1
                     animations:^{
                         mainScreen.view.center = CGPointMake(mainScreen.view.center.x, [[UIScreen mainScreen] bounds].size.height/2 );
                     }
     ];

    [splashScreen presentModalViewController:mainScreen animated:NO];
}

【问题讨论】:

  • 解决方案非常简单。您必须在呈现新的视图控制器之前完成动画。没有别的了。

标签: ios core-animation uistoryboard uistoryboardsegue


【解决方案1】:

您的源视图控制器似乎被隐藏的原因是目标视图控制器立即出现。

当您编写自定义转场时,您不能同时使用两个视图。你也可以

  • 推送视图控制器,将源视图添加到目标视图控制器并制作动画
  • 将目标视图添加到源视图控制器并制作动画,然后推送视图控制器
  • 推送到中间视图控制器,添加两个视图,制作动画,推送到目标视图控制器。

在上述所有我说推送视图控制器的情况下,您可以改为以模态方式呈现视图控制器。事实上,这可能更适合中间视图控制器解决方案。

【讨论】:

  • 我试过你提到的第二个选项,效果很好。这是代码:gist.github.com/3206340 但是你提到的三个选项中哪个最有效?
  • 它们在效率上并没有太大的区别。您应该选择一种感觉最干净、最容易理解和维护的版本。对于生产代码,我个人会选择第三个选项,因为它不会在动画期间与源或目标的视图层次结构混淆。但这是一个品味问题。
  • @DavidRönnqvist 我正在尝试使用 pop segue 而不是 push segue,但我基本上遵循选项 1,并且我的源视图没有动画。可以看一下my question中的代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 2015-06-22
  • 1970-01-01
  • 2011-12-17
相关资源
最近更新 更多