呈现模态视图控制器时,核心动画层表现得很奇怪。 CATransform3D 问题

Posted

技术标签:

【中文标题】呈现模态视图控制器时,核心动画层表现得很奇怪。 CATransform3D 问题【英文标题】:Core animation layer is acting weird when presenting a modal view controller. CATransform3D issue 【发布时间】:2012-12-23 01:39:03 【问题描述】:

我正在尝试创建自定义 UIView 转换。基本上,当呈现某个模态视图时,它所覆盖的视图就会移动到背景中。

为了实现这一点,我使用 Core 动画来操作视图层上的 CATransform3D,我将移至背景,然后在其上呈现模态视图。

为了将视图移动到背景中,我创建了一个 CABasicAnimation 来像这样动画化 CATransform3D 中的变化

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];

CATransform3D toTransform = CATransform3DIdentity;
toTransform.m34 = 1.0f / -500.0f;
toTransform = CATransform3DTranslate(toTransform, 0.0f, 0.0f, -40.0f);

[animation setFromValue:[NSValue valueWithCATransform3D:CATransform3DIdentity]];
[animation setToValue:[NSValue valueWithCATransform3D:toTransform]];
[animation setDuration:1.0f];

self.menuView.layer.transform = toTransform;
[self.menuView.layer addAnimation:animation forKey:@"moveBackAnimation];

self.menuView 是我要移回的视图。

在我添加模态视图之前,这很好用。

RVLAddViewController *addViewController = [[RVLAddViewController alloc] initWithNibName:@"RVLAddViewController" bundle:nil];
[self presentViewController:addViewController animated:YES completion:nil];

当按下按钮时,我在动画下方调用此代码。如果未显示此代码,则所有操作都按预期工作,视图看起来就像它只是淡入远处,然后停留在那里。

当模态视图出现时,它不会逐渐消失在远处,而是向下射击到较小的尺寸并移动到左上角。

我会尽快上传一个示例应用程序,github 现已关闭。 edit 不需要 - 已经给出了解决方案! /编辑

【问题讨论】:

【参考方案1】:

我搞砸了一段时间,看起来它与自动布局有关。如果您将其关闭,它会按预期工作。

【讨论】:

就是这样!谢谢 - 是时候了解更多关于自动布局的信息了。

以上是关于呈现模态视图控制器时,核心动画层表现得很奇怪。 CATransform3D 问题的主要内容,如果未能解决你的问题,请参考以下文章

在呈现模态视图时显示 UITabBar

关闭从模态呈现的视图控制器翻转的视图控制器

如何自定义模态视图控制器呈现动画?

如何在模态呈现的视图控制器上执行呈现模态序列?

在模态视图控制器的解除动画时访问presentingViewController

嵌入到导航控制器中的动画根视图控制器以模态方式呈现