使用模态转场时没有动画
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];
];
【讨论】:
感谢马特,这完全符合我的要求。也感谢您对您所做的事情的详细解释!做得很好。以上是关于使用模态转场时没有动画的主要内容,如果未能解决你的问题,请参考以下文章