使用布局约束动画UIView交换

时间:2017-04-13 02:37:01

标签: ios swift uiview

我正在交换一个UIView用于另一个 - 删除一个并添加另一个,这工作正常。我想为转换设置动画,这应该很简单,但问题是我需要在我添加的视图上添加布局约束。 (对添加的视图的约束与我正在删除的视图的约束不同。)

我不是试图为约束的变化设置动画。它们需要就位,以便以正确的尺寸显示视图,正确的尺寸会根据屏幕尺寸而变化。

在动画块中设置新约束显然会崩溃,因为尚未设置视图层次结构。在完成块中设置它们太晚了 - 它们被添加了,但新视图出错并且没有正确地使用新约束布局,直到下次更新视图时,这会导致布局“跳”到错了。

UIView.transition(with: containerView,
                  duration: 0.3,
                  options: .transitionCrossDissolve,
                  animations: {
                    self.containerView.addSubview(targetView)
                    self.currentView.removeFromSuperview()
                  }, completion: { _ in
                    self.currentView = targetView
                    self.setupConstraints()
                  })

有办法解决这个问题吗?我觉得我错过了一些东西,但我在文档中找不到它。

1 个答案:

答案 0 :(得分:2)

您可以在开始时设置所有视图和约束(例如,为targetView设置alpha = 0),然后只是动画视图的alpha和约束,在所有动画完成时删除不必要的视图。