2010-07-18 47 views
1

我有一個視圖,裏面有另一個視圖(稱爲swipeView)。我試圖使用CAGradientLayer到漸變顏色它 - 代碼如下漸變層沒有顯示/在現有視圖上工作

CAGradientLayer *layer = [CAGradientLayer layer]; 

layer.colors = [NSArray arrayWithObjects:(id)[UIColor darkGrayColor].CGColor, 
        [UIColor lightGrayColor].CGColor, nil]; 

layer.frame = swipeView.bounds; 

[swipeView.layer insertSublayer:layer atIndex:0]; 

我打電話這在主視圖控制器的viewDidLoad方法。我看不到任何效果 - 我試圖着色的視圖仍然是一樣的。我究竟做錯了什麼?有沒有其他設置/訂購等我應該知道?

回答

0

這應該工作。你確定你正確地連接了你的swipeView插座嗎?調試你的-viewDidLoad並確認swipeView不是零。再次檢查邊界(layer.frame)是否合理。

這不應該是必要的,但你可以嘗試拋出一個[layer setNeedsDisplay]只是爲了強制圖層再次渲染,但我不認爲這是你的問題在這裏。

0
CAGradientLayer *layer = [CAGradientLayer layer]; 

layer.colors = [NSArray arrayWithObjects:(id)[UIColor darkGrayColor].CGColor, 
       (id)[UIColor lightGrayColor].CGColor, nil]; 

layer.frame = swipeView.bounds; 

[swipeView.layer insertSublayer:layer atIndex:0]; 

確保swipeView不爲零並嘗試swipeView.frame。

2

我不知道這是否是您所遇到的問題,但我只是具有完全相同的症狀,困惑的幾個小時後,我發現我的問題:我創建一個按鈕,添加漸變圖層,並且只在稍後定位按鈕。最初,該按鈕尺寸都是0,並設置layer.frame = swipeView.bounds;當我設置梯度層具有0尺寸太。我添加了代碼,以便在調整按鈕大小時,我還調整了子層的大小以匹配,並解決了問題。我實際使用MonoTouch的,所以代碼如下所示:

btn.Frame = new RectangleF([the dimensions you need]); 

foreach(var s in btn.Layer.Sublayers) 
{ 
    s.Frame = btn.Bounds; 
} 

也許你在代碼中創建一個視圖,該視圖一直沒有大小或位置,所以當你添加漸變它也沒有大小,這就是爲什麼你看不到它。當視圖改變大小(在ViewDidLayoutSubviews也許),調整梯度層和看看是否能解決它。

0

你不需要的零終止在顏色數組的結尾。

另外,我發現insertSublayer沒有工作,與指數爲0或1更改爲簡單addSublayer的伎倆。