为什么我用渐变背景的UIView得到这种奇怪的行为?

时间:2015-02-25 05:20:41

标签: ios iphone uiview

我正在尝试将渐变图层添加到包含UIView的{​​{1}}(ContentView)。

我的UILabel实施:

UIView

但这是我在 iPhone 6 iOS模拟器中显示的结果

enter image description here

只有class ContentView: UIView { override init() { super.init() styleIt() } override init(frame: CGRect) { super.init(frame: frame) styleIt() } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) styleIt() } private func styleIt() { var gradient = CAGradientLayer() gradient.colors = [Utils.Colors.gray_ee.CGColor, Utils.Colors.gray_dd.CGColor] gradient.frame = bounds layer.insertSublayer(gradient, atIndex: 0) layer.borderColor = Utils.Colors.gray_aa.CGColor layer.borderWidth = 1 layer.cornerRadius = 7.0 } } UIView有一个奇怪的行为,此屏幕截图中的所有其他元素都不是cornerRadius元素。

我试图注释掉与边框相关的代码和半径代码,但问题仍然存在。

编辑:这是容器(UIView)的绿色背景的另一个屏幕截图,所有其他blah blah标签都在ContentView元素中,以在更大的上下文中显示问题。 < / p>

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试这样的事情

private var gradient: CAGradientLayer! // Make it a private variable

override init(frame: CGRect) { 
    // Only init(frame:) and init(coder:) are designated initializers. You don't need to override init(). Internally init() will call init(frame:)
    super.init(frame: frame)
    commonInit()
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    commonInit()
}

func commonInit() -> Void {
    // Create & add the layer
    gradient = CAGradientLayer()
    layer.addSublayer(gradient)

    // You need to set locations, startPoint, endPoint apart from colors
    // See Apple documentation for more info
    gradient.locations = [0.0, 1.0]
    gradient.startPoint = CGPointMake(0, 0)
    gradient.endPoint = CGPointMake(0, 1)
    gradient.colors = [UIColor.whiteColor().CGColor, UIColor.greenColor().CGColor];
}

override func layoutSubviews() {
    super.layoutSubviews()

    // bounds may not be correct in init(), better set the layer's frame here
    gradient.frame = bounds 
}