Crossfade多个UIViews没有背景偷看alpha?

时间:2014-11-05 22:37:23

标签: ios objective-c uiview core-graphics core-animation

我需要从一组视图交叉淡入到另一组视图。这些观点有时背后有背景。如果我使用animateWithDuration进行天真的交叉淡入淡出:v1.alpha = 1.0,v2.alpha = 0.0,那么在动画期间,您将简要地看到背景,因为两个视图相互叠加的alpha 0.5不具备最终的alpha为1.0,他们的最终alpha值为0.75,因此你可以看到背景。

有一个UIView方法transitionFromView:toView:...如果指定动画选项CrossDissolve,它允许你实现理想的交叉淡入淡出,但是,如果你一次运行其中两个,即使完全分开,这个方法也会失败观点,这是一个要求。也就是说,如果我将transitionFromView从A启动到B,然后将transitionFromView从C启动到D,那么第一个将会废弃。

还有另一种方法可以实现不会破坏的正确交叉淡入淡出吗? CoreAnimation有没有适当交叉淡化的库?或者是否有一些技巧我可以使用常规的UIView动画来实现它?

2 个答案:

答案 0 :(得分:1)

我认为v1高于v2(在subviews数组中,如果它们具有相同的父级),并且您希望显示v1并{{1}消失。

根本不需要为alpha v2制作动画。只需将v2的alpha设置为0到1的动画。当动画结束时,您可以根据需要将v1的alpha设置为0,并将其从视图层次结构中删除。

v2

答案 1 :(得分:0)

这是您如何在两个视图之间进行分解的方法:

UIView.transition(from: fromView, to: toView, duration: 0.3, options: .transitionCrossDissolve) { (_ finished) in
    // Completion block here
}