使用模态转场时没有动画

Posted

技术标签:

【中文标题】使用模态转场时没有动画【英文标题】:no animation when using modal segue 【发布时间】:2014-05-31 01:01:14 【问题描述】:

我有一个视图控制器和一些对象,我有一些简单的动画连接到。

[UIView animateWithDuration:0.25
                          delay: 10.1
                        options: UIViewAnimationOptionCurveEaseIn
                     animations:^
                         addNameViewConstraint.constant = 10;
                         addNameView.alpha = 1.0;
                         [self.view layoutIfNeeded];   // move
                     
                     completion:nil];

    [UIView animateWithDuration:0.25
                          delay: 0.15
                        options: UIViewAnimationOptionCurveEaseIn
                     animations:^
                         addEmailViewConstraint.constant = 10;
                         addEmailView.alpha = 1.0;
                         [self.view layoutIfNeeded];   // move
                     
                     completion:nil];

当我使用 push segue 时,动画效果很好。但是当我切换到使用模态segue时,动画停止工作。我将第一个延迟增加到 10.2 秒,我想在我看到它之前可能是动画。我在 viewWillAppear 方法中调用这个动画。如果我正在做一个推送segue,那么它再次起作用..但不适用于模态。有什么想法吗?

【问题讨论】:

您是在为 ios 7 开发而不是使用 xibs 吗?如果是,请将模态视图的背景颜色设置为白色。 尝试将代码移至viewDidAppear: 看看是否能解决问题。 谢谢马特! viewDidAppear 成功了。关于为什么的任何想法? jsksma2 - 为什么我必须将模态背景设置为白色? 使用 viewWillAppear 的主要缺点是,在模态视图到位之前,动画不会显示,在新视图控制器到位之前,动画会开始,这使得它更加流畅动画片。有没有办法仍然实现这一目标? 【参考方案1】:

我在 viewWillAppear 方法中调用这个动画

这是一个常见的错误。 viewWillAppear: 启动动画太早了。该视图尚未出现,因此没有任何动画。将animateWithDuration:... 代码移动到viewDidAppear:,一切都会好起来的。

但是,正如您在评论中所说,这还不够令人满意。您所追求的是模态转换应该发生,并且您在新视图中的额外动画应该已经发生,因为模态视图正在出现。相反,使用viewDidAppear:,模态视图完成出现,它就位,然后然后您的其他动画开始,这并不那么酷。

一个解决方案可能是再次移动动画,这次是viewWillLayoutSubviews。这更棘手,因为这个方法被调用了很多。您将需要使用 BOOL 实例变量作为标志,以确保您的动画只运行一次。因此,这应该可以工作(我试过了,看起来还不错):

-(void)viewWillLayoutSubviews 
    if (!self->didLayout) 
        self->didLayout = YES;
        [UIView animateWithDuration:0.25 animations:^
            // mess with constraint constants here
            [self.subv layoutIfNeeded];
        ];
    

【讨论】:

感谢马特,这完全符合我的要求。也感谢您对您所做的事情的详细解释!做得很好。

以上是关于使用模态转场时没有动画的主要内容,如果未能解决你的问题,请参考以下文章

自定义Controller转场动画

自定义转场动画--Swift3.0版本

故事板转场覆盖 iPhone 4 和 5 上的垂直过渡

使用自定义转场执行自定义转换的正确方法 - 没有副作用

模态转场导致黑屏

iOS - 如何在 Unwind Segue 中控制动画类型?