在UIView上应用Gradient没有得到预期的结果

时间:2016-10-13 03:37:42

标签: ios swift uiview swift2 cagradientlayer

我只是想将Gradient应用于2个UIColors,这就是我编写下面代码的原因。

class Constants: NSObject {
    class func applyGradient(localView:UIView, color1:UIColor, color2:UIColor) {
        let gradient: CAGradientLayer = CAGradientLayer()
        gradient.frame = localView.bounds
        gradient.colors = [color1.CGColor, color2.CGColor]
        gradient.startPoint = CGPoint(x: 0,y: 0)
        gradient.endPoint = CGPoint(x: 0,y: 1)
        localView.layer.insertSublayer(gradient, atIndex: 0)
        localView.layer.masksToBounds = true
    }
}

并通过下面的代码在UIViewController的viewDidLoad中应用。

Constants.applyGradient(viewContactDetail, color1: gradientColor1, color2: gradientColor2)
Constants.applyGradient(viewDiscountDetail, color1: gradientColor1, color2: gradientColor2)
Constants.applyGradient(viewTermsCondDetail, color1: gradientColor1, color2: gradientColor2)
Constants.applyGradient(viewDiscountAvailDetail, color1: gradientColor1, color2: gradientColor2)

这就是我得到的结果

enter image description here

您可以看到,Gradient不适用于特定视图。 我没有弄错我的代码。

修改 这是分层视图 enter image description here

3 个答案:

答案 0 :(得分:2)

试试这个....希望它对你有所帮助

let gradientLayer = CAGradientLayer()

    gradientLayer.frame = self.shadowview.bounds

    let colorTop = UIColor.green.cgColor
    let colorBottom = UIColor.black.cgColor

    gradientLayer.colors = [colorTop, colorBottom]
    gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)
    gradientLayer.endPoint = CGPoint(x: 0.0, y: 1.0)
    gradientLayer.locations = [ 0.0, 1.0]


    self.shadowview.layer.addSublayer(gradientLayer)

enter image description here

答案 1 :(得分:0)

你也可以尝试这个简单的代码,你可以给出渐变图层的框架并给出颜色

let gradient1 = CAGradientLayer()
gradient1.frame =  CGRect(origin: CGPointZero, size:  CGSize (width: self.view.frame.size.width,height: btn_cancel.frame.size.height))
gradient1.colors = [UIColor.whiteColor().CGColor, UIColor.init(red: 237.0/255.0, green: 237.0/255.0, blue: 237.0/255.0, alpha: 1.0).CGColor]
print(gradient1.frame)

只需将该图层添加到视图

即可
 "YOUR VIEW".layer.addSublayer(gradient1)

Image中您可以看到我添加了渐变图层到按钮,因此您可以在视图或任何其他控件中添加相同内容

答案 2 :(得分:0)

在设置框架之前调用layoutIfNeeded()为我工作。如果在您的情况下如果不想调用此尝试,请尝试使用willDisplayCell设置bool,该bool将仅首次应用并且帧已准备就绪。