2013-06-22 61 views
8

我有一個UIViewController,我創建CAGradientLayer發送到備份

CAGradientLayer *gradient = [CAGradientLayer layer]; 
    ... 
    gradient.frame = frame; 
    self.backGradient = gradient; 
    [self.view.layer insertSublayer:gradient atIndex:0]; 

它工作正常背景梯度,以後我要送我的視圖控制器的子視圖_selectionFrame向後:
(我經常需要發送_selectionFrame到後和向前,動畫和繪圖目的)

self是的viewController:

[self.view sendSubviewToBack:_selectionFrame]; 

但是,這發送gradient後面的_selectionFrame。我希望它只是在漸變的上方,但低於其他每個子視圖。問題在於漸變不是視圖,所以我不能使用漸變的函數。
我想打電話給[self.view sendSubviewToBack:gradient];

但是這不起作用。

回答

13

創建一個僅包含漸變的視圖

+0

工程,很簡單。 – AlexWien

3

最簡單的解決方案不是將漸變圖層作爲self.view.layer的子圖層插入。相反,它應該是self.view.layer。一個UIView子類有一個類方法layerClass,可以讓你說出它的圖層應該是什麼類。

或者,也可能是一些self.view其他子視圖的層,再次容易地通過使用相同的類方法layerClass佈置。

否則,您將不得不使用圖層命令而不是查看命令來訂購self.view的子圖層。這包括它的子視圖。換句話說,如果vself.view的子視圖,則v.layerself.view.layer的子圖層,並且您可以通過重新排列子圖層數組來在其子圖層中對其進行排序。

+0

self.view.layer = self.backGradient;不起作用self.view.layer是隻讀 – AlexWien

+0

你沒看過我說的。你必須使用一個自定義的UIView並實現'layerClass',這樣UIView纔會以CAGradientLayer作爲它的圖層「誕生」。 – matt

+0

謝謝有趣,但比必要更復雜(對我來說) – AlexWien