UIView动画交叉淡化导致alpha降至1.0以下?

Ben*_*tto 1 iphone animation alpha uiview

我正在使用UIView动画在两个视图之间交叉淡入淡出.我注意到以下令人惊讶的事实:

如果我在相同的位置有两个相同的视图,并且我在它们之间设置交叉淡入淡出动画(例如,在同一动画中,将动画从0.0到1.0的动画,同时从1.0到0.0,在同一动画中)在动画中,可见结果在动画过程中略微低于不透明 - 这是一个明显的神器,可以通过在交叉渐变视图后面放置一些其他视图来验证(在动画再次被遮挡之前,它会在动画期间短暂可见).

我希望(使用任何动画时序曲线)完美配对0-> 1和1-> 0 alpha转换总是加起来为1.0的净alpha值,并且在这个测试情况下,我永远不会看到任何明显的变化阿尔法,但我做.

知道这里发生了什么吗?我可以用这个"修复"来解决这个问题,但我最感兴趣的是在混合中我在概念上缺少的东西.

谢谢!

jtb*_*des 6

Alphas加起来为1.0的两个堆叠视图不能达到您的预期.它们成倍增加,而不是增加.

我们一次把它当作一大块.这是一个背景,100%闪耀:

bg
|======>
|======>
|======>
|======>
Run Code Online (Sandbox Code Playgroud)

现在让我们在顶部添加另一个视图,50%不透明度.这意味着它可以让50%的背景通过

bg 50%
|===|===>
|===|
|===|===>
|===|
Run Code Online (Sandbox Code Playgroud)

如果我们还有另外50%的观点怎么办?

bg 50% 50%
|===|===|===>
|===|   |
|===|===|
|===|   |
Run Code Online (Sandbox Code Playgroud)

另外50%的东西都通过了.这意味着仍然会显示50%×50%= 25%的背景图层.

现在,你真的想做什么?您希望新视图显示顺畅,通过旧视图的数量越来越多.因此,只需叠加两个视图,淡出顶部视图,但始终保持底部100%不透明度.否则,您将在动画期间显示一些背景.