溶解转换会还原UI元素框架更改

时间:2015-01-31 01:07:40

标签: ios animation uimodaltransitionstyle

我正在使用模态转换从一个XIB转换到另一个XIB,除了一件事我完全没有工作:转换开始的那一刻,我在之前做过的所有动作动画视图被还原。

以下是我正在使用的方法:

- (IBAction)chooseInsight:(id)sender {
    [CATransaction setCompletionBlock:^{
        ContainerViewController *insight = [[ContainerViewController alloc] init];
        insight.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentViewController:insight animated:YES completion:nil];
    }];
    [self animateExit];
}

animateExit方法为几个UI对象设置了1秒的帧移动动画,从而产生一切从屏幕上飞出的效果,留下纯色背景。我希望这个纯色背景会溶解到下一个视图ContainerViewController

但是会发生的事情是UI对象飞离屏幕,我们看到纯色背景,然后突然所有按钮和标签都后退,以便它们可以溶解到{{1} }。

为什么会这样?是否已缓存上一个视图的图像,以辅助动画?如果是这样,我可以在转换之前刷新缓存吗?或者如果没有,我能做些什么来使这种解散工作顺利进行?

编辑:如果相关,我从this answer获得ContainerViewController位,了解如何延迟到动画结束。我心中有一个声音说可能这两个动画可能是问题的根源,但我对iOS动画的熟悉程度不足以弄明白......

1 个答案:

答案 0 :(得分:2)

  

我在前一个视图中完成的所有动画动画都已恢复。

因为您通过更改这些子视图的框架(或中心)来执行这些动画。但是你也在使用Autolayout。你不能这样做。框架和Autolayout是彼此的敌人。

当过渡到来时,布局就会发生。这意味着遵守约束 - 这就是Autolayout 的意思。但你没有改变约束(这是你应该做的);你改变了框架。约束赢了,所以一切都回到原来的位置,因为这就是约束所要做的事情。