2016-07-23 61 views
1

我有一個簡單的計算器用戶界面,其中我試圖以編程方式將梯度添加到結果/輸出標籤的背景。問題是你只能使用子視圖,如果你仍然想在前面展示。但是當我這樣做時,界面會在屏幕上變形。當我添加一個子視圖時屏幕扭曲

下面是兩個計算器線程使用的子視圖的類似地雷的任務這表明:

Adding a CGGradient as sublayer to UILabel hides the text of label

UILabel add GradientLayer

我使用添加通過子視圖漸變中的代碼是基於上述解決方案:

let gradientLayer = CAGradientLayer() 
gradientLayer.frame = CGRectMake(1, 1, resultLabel.frame.width-2, resultLabel.frame.height-2) //resultLabel.bounds 
gradientLayer.colors = [UIColor.greenColor().CGColor as CGColorRef, UIColor.blueColor().CGColor as CGColorRef] 
gradientLayer.locations = [0.0, 1.0] 

var labelBackground = UIView(frame: resultLabel.frame) 
resultLabel.backgroundColor = UIColor.clearColor() 
resultLabel.frame = resultLabel.bounds 
labelBackground.layer.addSublayer(gradientLayer) 
labelBackground.addSubview(resultLabel) 

self.view.addSubview(labelBackground) 

儘管它應用了所需的漸變,顯示器仍然是dist滔滔不絕。

我使用雨燕2.2和Xcode 7.3.1

我在做什麼錯?

通過子視圖添加漸變之前:

enter image description here

後:

enter image description here

+0

是不是在'CALayer'級完成梯度? –

+0

確實如此,但對於UILabel,如果僅將CALayer添加爲子圖層,則會隱藏標籤文本(因此您只能看到漸變)。子視圖方法用於添加漸變圖層,同時還將標籤文本保留在前面。 – Ahmad

+0

你已經試過'insertSublayer(_:CALayer,下面:CALayer)'或'insertSublayer(_:CALayer,atIndex:Int)'嗎? –

回答

1

試試這個:

let labelBackground: UIView = UIView(frame: self.resultLabel.frame) 
self.resultLabel.backgroundColor = UIColor.clearColor() 
self.resultLabel.frame = self.resultLabel.bounds 

let gradientLayer: CAGradientLayer = CAGradientLayer() 
gradientLayer.frame = labelBackground.layer.bounds 
gradientLayer.colors = [UIColor.greenColor().CGColor as CGColorRef, UIColor.blueColor().CGColor as CGColorRef] 
gradientLayer.locations = [0.0, 1.0] 

labelBackground.layer.addSublayer(gradLayer) 
labelBackground.addSubview(self.resultLabel) 

self.view.addSubview(labelBackground) 
+0

我假設您建議將漸變添加爲子圖層而不是子視圖(包含漸變子圖層)。這有效,但標籤文本不會出現,這就是爲什麼我試圖使用這種方法(請參閱我在問題中提到的鏈接)。 – Ahmad

+0

請參閱新的答案編輯。 – Rigo

+0

謝謝,但它仍然無法正常工作。無論如何,我認爲你只重新安排了我之前的一些代碼。 – Ahmad

0

所以我設法解決自己使用這個問題一個不同ent技術。

我想得到一個帶有漸變填充的UILabel,同時還將文本保留在UILabel的正面。

爲了達到這個目的,我在UILabel後面放置了一個UIView對象,並確保它們的大小和座標是相同的。我設置了佈局約束,它們都是相同的高度和寬度,並且都與相鄰元素具有相同的距離。我也使UILabel透明。在此之後,我只是將漸變作爲子圖層添加到UIView中,並且效果非常好。

相關問題