2014-11-08 34 views
1

我試圖將不透明度添加到我的視圖中。當我添加CAGradientlayer時,我大致得到了我計劃的內容,但有幾個問題。CAGradientLayer Mask在Swift中添加不透明度

  1. 我無法改變顏色。不管我使用什麼值,我總是會得到一個白色的圖層
  2. 即使我希望它分佈在整個視圖上,它似乎有一個左邊的偏移量。

enter image description here

我的代碼如下:

let maskLayer = CAGradientLayer() 

maskLayer.anchorPoint = CGPoint(x: 0.0, y: 0.0) 

maskLayer.startPoint = CGPoint(x: 0.0, y: 0.5) 
maskLayer.endPoint = CGPoint(x: 1.0, y: 0.5) 

maskLayer.colors = [UIColor(white: 0.0, alpha: 0.0).CGColor, UIColor(white: 1.0, alpha: 1.0).CGColor, UIColor(white: 0.0, alpha: 0.0).CGColor] 
maskLayer.locations = [0.0, 0.5, 1.0] 
maskLayer.bounds = CGRectMake(0, 0, self.frame.width, self.frame.height) 

self.layer.mask = maskLayer 

我在做什麼錯?

感謝

回答

0

關於白色的,這是因爲一個圖層蒙版並沒有顏色,只有透明貢獻。實際上,只有alpha分量纔有效果,並且忽略了圖層蒙版的R,G,B分量。

關於偏移量,可能是因爲您的視圖正在調整大小,並且圖層無法保持最新​​?如果是這樣,你可以看到這個問題的答案:CALayers didn't get resized on its UIView's bounds change. Why?

+0

感謝您的澄清。當我按照鏈接中的建議應用layoutSubviews時,它會清除左側的偏移量,並將底部的偏移量添加到底部。 – Jan 2014-11-09 12:46:41

+0

你能展示你的layoutSubviews實現嗎? – Clafou 2014-11-09 12:52:49

+0

override func layoutSubviews(){ lineLayer.frame = self.bounds super.layoutSubviews() }其中lineLayer是作爲子視圖添加的calayer – Jan 2014-11-09 12:58:46