2014-11-05 61 views
0

我需要從一組視圖交叉淡入到另一組視圖。這些觀點背後有時會有背景。如果我用animateWithDuration做了一個天真的交叉淡入淡出:v1.alpha = 1.0,v2.alpha = 0.0,那麼在動畫過程中,你會簡要地看到背景,因爲alpha 0.5堆疊在一起的兩個視圖沒有最終的alpha的1.0,他們有一個我相信0.75的最後一個alpha,因此你可以看到背景。交叉淡入淡出多個UIViews沒有背景透過alpha?

有一個UIView方法transitionFromView:toView:...它允許您在指定動畫選項CrossDissolve時實現理想的淡入淡出效果,但是,如果您一次運行兩個,單獨的意見,這是一個要求。也就是說,如果我啓動transitionFromView從A到B,然後transitionFromView從C到D之後,第一個將會廢話。

是否有另一種方法來實現不會中斷的正確交叉淡入淡出? CoreAnimation有適當的交叉淡入庫嗎?還是有一些技巧,我可以用它來實現它與常規的UIView動畫?

回答

2

我認爲v1高於v2(它後subviews陣列中,如果他們有相同的父),並且要v1出現,v2消失。

根本沒有必要動畫alpha v2。只需將v1的alpha從0變爲1即可。動畫結束時,如果需要,可以將v2的alpha設置爲0,並將其從視圖層次結構中刪除。

[UIView animateWithDuration:0.2 animations:^{ 
    v1.alpha = 1; 
} completion:^{ 
    v2.alpha = 0; 
    [v2 removeFromSuperview]; 
}]; 
+0

這在視圖大小不同的情況下不起作用。想象你的v2是一個大紅色的盒子,你的v1是一個位於紅色盒子裏的小藍盒子。使用上面的代碼,藍色框會在頂部淡入淡出,但紅色框不會淡出,只會在動畫完成時彈出。 transitionFromView正確地解決了這個問題,但正如前面提到的那樣,當有多個轉換同時發生時,它會中斷。 – puzzl 2014-11-06 02:35:44