2010-08-11 55 views
1

我使用UIView動畫在兩個視圖之間交叉淡入淡出。我注意到以下令人驚訝的事實:UIView動畫淡入淡出導致alpha降到1.0以下?

如果我在一個相同的位置有(說)兩個相同的視圖,並且我在它們之間設置了交叉淡入淡出效果(例如,從1.0到1.0另一方面,在同一動畫中爲0.0),在動畫期間,可見結果在動畫期間略微低於不透明 - 這是顯着的人爲因素,可以通過在交叉漸變視圖後面放置其他視圖來驗證它(它變得可見在動畫再次被遮蔽之前簡單地進行)。

我期望(使用任何動畫定時曲線),該完全配對的0-> 1和1-> 0的α轉變總是加起來1.0淨α,並且在此測試的情況下,我應該從來沒有看到阿爾法的任何可見的變化,但我確實。

任何想法這裏發生了什麼?我可以繞過這個「修復」,但我最感興趣的是我在混合中在概念上缺少的東西。

謝謝!

+0

如果您有這個問題,您可以分享一個解決方案來克服這個問題嗎? – Brackets 2017-05-06 02:48:35

回答

6

兩個疊加的alpha視圖加起來可以達到1.0,不會做你認爲的事情。他們成倍增長,而不是增加。

讓我們一次一小塊。這裏有一個背景,透過100%:

bg 
|======> 
|======> 
|======> 
|======> 

現在讓我們在頂部,50%不透明度添加另一個視圖。這意味着它通過

bg 50% 
|===|===> 
|===| 
|===|===> 
|===| 

讓背景的50%,如果我們有在上面另有50%的看法?

bg 50% 50% 
|===|===|===> 
|===| | 
|===|===| 
|===| | 

的東西后面通過通過另一個50%。這意味着背景圖層的50%×50%= 25%仍然會顯示出來。

現在,你真正想做什麼?您希望新視圖能夠順利出現,並且越過舊視圖越來越多。所以只需疊加兩個視圖,並淡出頂部,但始終保持100%的不透明度,整個時間。否則,您將在動畫過程中顯示一些背景。

+0

你讓我在「倍增,沒有增加」。 :)謝謝,清楚的解釋,我希望我可以給更多的觀點,包括偉大的圖表。 – 2010-08-11 19:33:25

0

這只是一個猜測,沒有實際的基礎,但由於阿爾法被表示爲CGFloat,所以我建議不要試圖假設任何關於它的東西加起來就是1.0,因爲代表該類型浮點的困難的精度。他們可能加起來達到.99左右,造成這個神器。

+0

這比float精度問題更明顯。根據jtbande的回答,這更像是.75左右:) – 2010-08-11 19:34:58