2015-10-29 48 views
0

這裏是iPad模擬器與四個嵌套UIView s,繪製自定義背景和內部UILabel。我旋轉頂部UIView的CALayer的,通過讓這層設置transform用旋轉Y CATransform3D,動畫在一個單獨的線程(但更改transform被主線程上發送,自然):CALayer旋轉似乎'提升'它的表面以上的兒童

Oh deary me

注意 - 該動畫無法正確循環,因此它看起來反彈。

動畫作爲一個整體層,但奇怪的是,第一個孩子,它的後代似乎漂浮在UIView與變換應用上面!

UIView本身是另一個UIView的孩子,它有一個紅色的背景。在其他地方沒有其他轉換應用。

每個UIView的位置最初是在開始時使用setFrame設置的。

什麼是造成這種奇怪的行爲,我如何確保孩子UIView與他們的父母轉變,給整個表面一個平坦的外觀?

+1

圖層具有'zPosition'屬性。默認情況下爲零,但可能出錯了。您可以嘗試手動設置它。這是我能想到的唯一的事情.. –

+0

不,手動強制子的'zPosition'爲0(或任何其他值)沒有可辨別的效果,並且記錄該值聲稱它初始爲零。這就是說,*應該*設置'zPosition'來表示100,顯然是在做一些事情?如果是這樣,可能是一個線索。 – mseddon

+1

它什麼都不做,對於錯誤的希望感到抱歉;)我只是嘗試了很多東西,但無法獲得您的酷炫效果,所以我不知道您是如何得到它的。順便說一句,我用了一個常規的'CABasicAnimation',也許你可以在你的代碼中使用它。 –

回答

1

好吧。也許毫不奇怪,我做了一件愚蠢的事情,但由於之前我沒有使用過CALayer變換,所以我不知道事情是否發生了。我在創建的UIViews上覆蓋了layoutSubviews,並且旋轉CALayer的動作觸發了這個調用,然後由於一個錯誤而推動了子組件框架。

0

問題是,CALayers默認情況下實際上並未實現3D透視。爲了做到這一點,您需要對圖層的變換(其類型爲CATransform3D)進行較小的更改

您想要將變換的.m34字段更改爲較小的負值。嘗試-1/200至-1/500作爲起始範圍。如果我沒有記錯,它應該是圖像高度/寬度上的負1。

將要顯示的圖層的.m34屬性更改爲「脫離頁面」並以3D旋轉。當你這樣做的時候,圖層的Z設置很重要,並且都會使得更接近的圖層更大,並且使距離更遠的圖層消失在其他東西之後。

我建議您在「CATransform3D m34」上進行Google搜索以獲取更多信息。網上有大量關於它的信息。

+0

我現在不想要3D透視圖,而且我知道如何設置投影矩陣。我不確定你是否看過我的問題。 – mseddon