简体   繁体   English

如何将渐变应用于多个自定义uiview?

[英]How to apply gradients to mulitple custom uiviews?

I have 6 custom uiviews arranged. 我安排了6个自定义uiviews。 Also I have tried applying gradient using various techniques. 我也尝试使用各种技术应用渐变。

How to call the functions or how to apply gradient for mulitple views having different cgcolor codes. 如何调用函数或如何为具有不同cgcolor代码的多个视图应用渐变。

        func onebg(){
                    applyGradient(color_1: UIColor(red: 218.0/255.0, green: 52.0/255.0, blue: 204.0/255.0, alpha: 1.0).cgColor, color_2: UIColor(red: 149.0/255.0, green: 39.0/255.0, blue: 137.0/255.0, alpha: 1.0).cgColor, view: calendarView)
                }

        func twobg(){
                    applyGradient(color_1: UIColor(red: 104.0/255.0, green: 220.0/255.0, blue: 108.0/255.0, alpha: 1.0).cgColor, color_2: UIColor(red: 28.0/255.0, green: 170.0/255.0, blue: 87.0/255.0, alpha: 1.0).cgColor, view: classroomView)
                }

        func threebg(){
                    applyGradient(color_1: UIColor(red: 0.0/255.0, green: 144.0/255.0, blue: 214.0/255.0, alpha: 1.0).cgColor, color_2: UIColor(red: 34.0/255.0, green: 66.0/255.0, blue: 138.0/255.0, alpha: 1.0).cgColor, view: appointmentView)
                }


        I have called this 6 methods like, onebg() twobg() from viewdidload(). But it is not applying and most importantly what i am getting is , the gradient color is applied only for last view. 

        func applyGradient(color_1 : CGColor , color_2: CGColor , view : UIView)  {

                    gradientLayer.frame = view.bounds

                    let color1 = color_1

                    let color2 = color_2

                    gradientLayer.colors = [color1, color2]

                    gradientLayer.locations = [0.0, 0.75, 0.25, 1.0]

                    view.layer.insertSublayer(gradientLayer, at: 0)
        }

This is the method im calling for applying ,by adding insertsublayer for gradients.Please help. 这是我呼吁应用的方法,方法是为渐变添加insertsublayer。请提供帮助。

Swift 4.0 迅捷4.0

You need to implement this code in one file and assign to view, configure in inspector attribute your gradient as below image 您需要在一个文件中实现此代码,然后分配以在检查器属性中查看,配置渐变,如下图所示

You can try this way. 您可以尝试这种方式。

@IBDesignable class xGradientView: UIView {

    @IBInspectable
    var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
        }
    }

    @IBInspectable
    var borderWidth: CGFloat {
        get {
            return layer.borderWidth
        }
        set {
            layer.borderWidth = newValue
        }
    }

    @IBInspectable
    var borderColor: UIColor? {
        get {
            if let color = layer.borderColor {
                return UIColor(cgColor: color)
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.borderColor = color.cgColor
            } else {
                layer.borderColor = nil
            }
        }
    }

    @IBInspectable
    var shadowRadius: CGFloat {
        get {
            return layer.shadowRadius
        }
        set {
            layer.shadowRadius = newValue
        }
    }
    @IBInspectable
    var shadowOpacity: Float {
        get {
            return layer.shadowOpacity
        }
        set {
            layer.shadowOpacity = newValue
        }
    }

    @IBInspectable
    var shadowOffset: CGSize {
        get {
            return layer.shadowOffset
        }
        set {
            layer.shadowOffset = newValue
        }
    }

    @IBInspectable
    var shadowColor: UIColor? {
        get {
            if let color = layer.shadowColor {
                return UIColor(cgColor: color)
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.shadowColor = color.cgColor
            } else {
                layer.shadowColor = nil
            }
        }
    }

//    MARK:- Gradient Color

    @IBInspectable var startColor:   UIColor = .clear { didSet { updateColors() }}
    @IBInspectable var endColor:     UIColor = .clear { didSet { updateColors() }}
    @IBInspectable var startLocation: Double =   0.0 { didSet { updateLocations() }}
    @IBInspectable var endLocation:   Double =   0.0 { didSet { updateLocations() }}
    @IBInspectable var horizontalMode:  Bool =  false { didSet { updatePoints() }}
    @IBInspectable var diagonalMode:    Bool =  false { didSet { updatePoints() }}
    var gradientSet = [[CGColor]]()
    var currentGradient: Int = 0
    override class var layerClass: AnyClass { return CAGradientLayer.self }
    var gradientLayer: CAGradientLayer { return layer as! CAGradientLayer }
    func updatePoints() {
        if horizontalMode {
            gradientLayer.startPoint = diagonalMode ? CGPoint(x: 1, y: 0) : CGPoint(x: 0, y: 0.5)
            gradientLayer.endPoint   = diagonalMode ? CGPoint(x: 0, y: 1) : CGPoint(x: 1, y: 0.5)

        } else {
            gradientLayer.startPoint = diagonalMode ? CGPoint(x: 0, y: 0) : CGPoint(x: 0.5, y: 0)
            gradientLayer.endPoint   = diagonalMode ? CGPoint(x: 1, y: 1) : CGPoint(x: 0.5, y: 1)
        }
    }
    func updateLocations() {
        gradientLayer.locations = [startLocation as NSNumber, endLocation as NSNumber]
    }
    func updateColors() {
        gradientLayer.colors    = [startColor.cgColor, endColor.cgColor]
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        gradientLayer.drawsAsynchronously = true
        gradientSet.append([startColor.cgColor, endColor.cgColor])
        gradientSet.append([endColor.cgColor, startColor.cgColor])
        updatePoints()
        updateLocations()
        updateColors()
    }
}

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM