swift2 在UIView上应用梯度未获得预期结果

bbmckpt7  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(194)

我只是简单地想应用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)

这是我得到的结果

您可以看到,渐变未正确应用于特定视图。
我不知道我的代码有什么问题。

**EDIT:**这是分层视图。

trnvg8h3

trnvg8h31#

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

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)

deyfvvtc

deyfvvtc2#

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

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你可以看到我添加了渐变层按钮,所以你可以做同样的添加到您的视图或任何其他控件

m2xkgtsf

m2xkgtsf3#

在设置帧之前调用layoutIfNeeded()对我来说很有效。如果在你的情况下,如果不想调用这个,试着通过设置一个bool来使用willDisplayCell,这个bool只会在第一次和你的帧准备好的时候应用。

相关问题