溶解过渡还原 UI 元素框架更改
Dissolve transition reverts UI element frame changes
我正在使用模态转换从一个 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 对象飞出屏幕,我们看到纯色背景,然后突然所有按钮和标签对齐 back 所以他们可以融入 ContainerViewController
.
为什么会这样?是否缓存了先前视图的图像以辅助动画?如果是这样,我可以在转换前刷新缓存吗?或者,如果没有,我该怎么做才能使溶解工作顺利进行?
编辑: 如果它是相关的,我从 this answer 那里得到了关于如何延迟到动画结束的 CATransaction
位。在我的脑海深处有一个声音说也许这两个动画是问题的根源,但我对 iOS 动画还不够熟悉,无法弄清楚如何...
all the movement animations I've done on the previous view are reverted.
因为您通过更改这些子视图的 帧 (或中心)来执行这些动画。但是您也在使用自动版式。你不能那样做。框架和自动布局是彼此的敌人。
当过渡出现时,布局就会发生。这意味着 约束被遵守 - 这就是 Autolayout 的意思 。但是你没有改变约束(这是你应该做的);你改变了框架。约束获胜,所以一切都回到原来的位置,因为这就是约束所说的。
我正在使用模态转换从一个 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 对象飞出屏幕,我们看到纯色背景,然后突然所有按钮和标签对齐 back 所以他们可以融入 ContainerViewController
.
为什么会这样?是否缓存了先前视图的图像以辅助动画?如果是这样,我可以在转换前刷新缓存吗?或者,如果没有,我该怎么做才能使溶解工作顺利进行?
编辑: 如果它是相关的,我从 this answer 那里得到了关于如何延迟到动画结束的 CATransaction
位。在我的脑海深处有一个声音说也许这两个动画是问题的根源,但我对 iOS 动画还不够熟悉,无法弄清楚如何...
all the movement animations I've done on the previous view are reverted.
因为您通过更改这些子视图的 帧 (或中心)来执行这些动画。但是您也在使用自动版式。你不能那样做。框架和自动布局是彼此的敌人。
当过渡出现时,布局就会发生。这意味着 约束被遵守 - 这就是 Autolayout 的意思 。但是你没有改变约束(这是你应该做的);你改变了框架。约束获胜,所以一切都回到原来的位置,因为这就是约束所说的。