【发布时间】:2016-07-23 04:55:43
【问题描述】:
我有一个简单的计算器 UI,我试图在其中以编程方式将渐变添加到结果/输出标签的背景。问题是如果您仍然想在前面显示,您只能使用子视图来做到这一点。但是当我这样做时,UI 会在屏幕上全部变形。
以下是两个 stackoverflow 线程,它们建议将子视图用于类似于我的任务:
Adding a CGGradient as sublayer to UILabel hides the text of label
我通过子视图添加渐变的代码是基于上面的解决方案:
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)
虽然它应用了所需的渐变,但显示严重失真。
我正在使用 Swift 2.2 和 Xcode 7.3.1
我做错了什么?
在通过子视图添加渐变之前:
之后:
【问题讨论】:
-
渐变不是在
CALayer级别完成的吗? -
是的,但是对于 UILabel,如果您将 CALayer 简单地添加为子图层,它会隐藏标签文本(因此您只能看到渐变)。 subview方法用于添加渐变层,同时也保持标签文字在最前面。
-
您尝试过
insertSublayer(_: CALayer, below: CALayer)或insertSublayer(_: CALayer, atIndex: Int)吗? -
@NoodleOfDeath,该技术不适用于 UILabel。反正我刚才也确认了。
标签: ios swift xcode uiview swift2