首页 文章

如何将Gradient应用于iOS Swift App的后台视图

提问于
浏览
125

我正在尝试应用渐变作为视图的背景颜色(故事板的主视图) . 代码运行,但没有任何变化 . 我正在使用xCode Beta 2和Swift .

这是代码:

class Colors {
  let colorTop = UIColor(red: 192.0/255.0, green: 38.0/255.0, blue: 42.0/255.0, alpha: 1.0)
  let colorBottom = UIColor(red: 35.0/255.0, green: 2.0/255.0, blue: 2.0/255.0, alpha: 1.0)

  let gl: CAGradientLayer

  init() {
    gl = CAGradientLayer()
    gl.colors = [ colorTop, colorBottom]
    gl.locations = [ 0.0, 1.0]
  }
}

然后在视图控制器中:

let colors = Colors()

  func refresh() {
        view.backgroundColor = UIColor.clearColor()
        var backgroundLayer = colors.gl
        backgroundLayer.frame = view.frame
        view.layer.insertSublayer(backgroundLayer, atIndex: 0)
      }
    }
  }

21 回答

  • 0

    我制作了一个UIView扩展,将基本渐变应用于任何视图

    extension UIView {
        func layerGradient() {
            let layer : CAGradientLayer = CAGradientLayer()
            layer.frame.size = self.frame.size
            layer.frame.origin = CGPointMake(0.0,0.0)
            layer.cornerRadius = CGFloat(frame.width / 20)
    
            let color0 = UIColor(red:250.0/255, green:250.0/255, blue:250.0/255, alpha:0.5).CGColor
            let color1 = UIColor(red:200.0/255, green:200.0/255, blue: 200.0/255, alpha:0.1).CGColor
            let color2 = UIColor(red:150.0/255, green:150.0/255, blue: 150.0/255, alpha:0.1).CGColor
            let color3 = UIColor(red:100.0/255, green:100.0/255, blue: 100.0/255, alpha:0.1).CGColor
            let color4 = UIColor(red:50.0/255, green:50.0/255, blue:50.0/255, alpha:0.1).CGColor
            let color5 = UIColor(red:0.0/255, green:0.0/255, blue:0.0/255, alpha:0.1).CGColor
            let color6 = UIColor(red:150.0/255, green:150.0/255, blue:150.0/255, alpha:0.1).CGColor
    
            layer.colors = [color0,color1,color2,color3,color4,color5,color6]
            self.layer.insertSublayer(layer, atIndex: 0)
        }
    }
    
  • 119

    使用此自定义类扩展 UIView .


    GradientView.swift

    import UIKit
    
    class GradientView: UIView {
    
        // Default Colors
        var colors:[UIColor] = [UIColor.redColor(), UIColor.blueColor()]
    
        override func drawRect(rect: CGRect) {
    
            // Must be set when the rect is drawn
            setGradient(colors[0], color2: colors[1])
        }
    
        func setGradient(color1: UIColor, color2: UIColor) {
    
            let context = UIGraphicsGetCurrentContext()
            let gradient = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), [color1.CGColor, color2.CGColor], [0, 1])!
    
            // Draw Path
            let path = UIBezierPath(rect: CGRectMake(0, 0, frame.width, frame.height))
            CGContextSaveGState(context)
            path.addClip()
            CGContextDrawLinearGradient(context, gradient, CGPointMake(frame.width / 2, 0), CGPointMake(frame.width / 2, frame.height), CGGradientDrawingOptions())
            CGContextRestoreGState(context)
        }
    
        override func layoutSubviews() {
    
            // Ensure view has a transparent background color (not required)
            backgroundColor = UIColor.clearColor()
        }
    
    }
    

    用法

    gradientView.colors = [UIColor.blackColor().colorWithAlphaComponent(0.8), UIColor.clearColor()]


    结果

    enter image description here

  • 44

    Swift 3 - 仅使用纹理和SKSpriteNode,不需要UIView

    import Foundation
    import SpriteKit
    
    class GradientSpriteNode : SKSpriteNode
    {
        convenience init(size: CGSize, colors: [UIColor], locations: [CGFloat])
        {
            let texture = GradientSpriteNode.texture(size: size, colors: colors, locations: locations)
            self.init(texture: texture, color:SKColor.clear, size: texture.size())
        }
    
        private override init(texture: SKTexture!, color: SKColor, size: CGSize) {
            super.init(texture: texture, color: color, size: size)
        }
    
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    
        private static func texture(size: CGSize, colors: [UIColor], locations: [CGFloat]) -> SKTexture
        {
            UIGraphicsBeginImageContext(size)
            let context = UIGraphicsGetCurrentContext()!
            let gradient = CGGradient(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: colors.map{$0.cgColor} as CFArray, locations: locations)!
            context.drawLinearGradient(gradient, start: CGPoint(x: size.width / 2, y: 0), end: CGPoint(x: size.width / 2, y: size.height), options: CGGradientDrawingOptions())
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return SKTexture(image: image!)
    
        }
    }
    

    用法:

    let gradient = GradientSpriteNode(
            size: CGSize(width: 100, height: 100),
            colors: [UIColor.red, UIColor.blue],
            locations: [0.0, 1.0])
    addChild(gradient)
    
  • 13

    只需指定视图的框架,即可显示渐变颜色 .

    let firstColor =  UIColor(red: 69/255, green: 90/255, blue: 195/255, alpha: 1.0).CGColor
    
     let secondColor = UIColor(red: 230/255, green: 44/255, blue: 75/255, alpha: 1.0).CGColor
    
        let gradientLayer = CAGradientLayer()
        gradientLayer.colors = [ firstColor, secondColor]
        gradientLayer.locations = [ 0.0, 1.0]
        gradientLayer.frame = CGRectMake(0, 0, 375, 64)// You can mention frame here
    
        self.view.layer.addSublayer(gradientLayer)
    
  • 106

    我有这些扩展:

    @IBDesignable class GradientView: UIView {
        @IBInspectable var firstColor: UIColor = UIColor.red
        @IBInspectable var secondColor: UIColor = UIColor.green
    
        @IBInspectable var vertical: Bool = true
    
        lazy var gradientLayer: CAGradientLayer = {
            let layer = CAGradientLayer()
            layer.colors = [firstColor.cgColor, secondColor.cgColor]
            layer.startPoint = CGPoint.zero
            return layer
        }()
    
        //MARK: -
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
    
            applyGradient()
        }
    
        override init(frame: CGRect) {
            super.init(frame: frame)
    
            applyGradient()
        }
    
        override func prepareForInterfaceBuilder() {
            super.prepareForInterfaceBuilder()
            applyGradient()
        }
    
        override func layoutSubviews() {
            super.layoutSubviews()
            updateGradientFrame()
        }
    
        //MARK: -
    
        func applyGradient() {
            updateGradientDirection()
            layer.sublayers = [gradientLayer]
        }
    
        func updateGradientFrame() {
            gradientLayer.frame = bounds
        }
    
        func updateGradientDirection() {
            gradientLayer.endPoint = vertical ? CGPoint(x: 0, y: 1) : CGPoint(x: 1, y: 0)
        }
    }
    
    @IBDesignable class ThreeColorsGradientView: UIView {
        @IBInspectable var firstColor: UIColor = UIColor.red
        @IBInspectable var secondColor: UIColor = UIColor.green
        @IBInspectable var thirdColor: UIColor = UIColor.blue
    
        @IBInspectable var vertical: Bool = true {
            didSet {
                updateGradientDirection()
            }
        }
    
        lazy var gradientLayer: CAGradientLayer = {
            let layer = CAGradientLayer()
            layer.colors = [firstColor.cgColor, secondColor.cgColor, thirdColor.cgColor]
            layer.startPoint = CGPoint.zero
            return layer
        }()
    
        //MARK: -
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
    
            applyGradient()
        }
    
        override init(frame: CGRect) {
            super.init(frame: frame)
    
            applyGradient()
        }
    
        override func prepareForInterfaceBuilder() {
            super.prepareForInterfaceBuilder()
            applyGradient()
        }
    
        override func layoutSubviews() {
            super.layoutSubviews()
            updateGradientFrame()
        }
    
        //MARK: -
    
        func applyGradient() {
            updateGradientDirection()
            layer.sublayers = [gradientLayer]
        }
    
        func updateGradientFrame() {
            gradientLayer.frame = bounds
        }
    
        func updateGradientDirection() {
            gradientLayer.endPoint = vertical ? CGPoint(x: 0, y: 1) : CGPoint(x: 1, y: 0)
        }
    }
    
    @IBDesignable class RadialGradientView: UIView {
    
        @IBInspectable var outsideColor: UIColor = UIColor.red
        @IBInspectable var insideColor: UIColor = UIColor.green
    
        override func awakeFromNib() {
            super.awakeFromNib()
    
            applyGradient()
        }
    
        func applyGradient() {
            let colors = [insideColor.cgColor, outsideColor.cgColor] as CFArray
            let endRadius = sqrt(pow(frame.width/2, 2) + pow(frame.height/2, 2))
            let center = CGPoint(x: bounds.size.width / 2, y: bounds.size.height / 2)
            let gradient = CGGradient(colorsSpace: nil, colors: colors, locations: nil)
            let context = UIGraphicsGetCurrentContext()
    
            context?.drawRadialGradient(gradient!, startCenter: center, startRadius: 0.0, endCenter: center, endRadius: endRadius, options: CGGradientDrawingOptions.drawsBeforeStartLocation)
        }
    
        override func draw(_ rect: CGRect) {
            super.draw(rect)
    
            #if TARGET_INTERFACE_BUILDER
                applyGradient()
            #endif
        }
    }
    

    用法:

    enter image description here

    enter image description here

  • 3

    斯威夫特4

    添加视图插座

    @IBOutlet weak var gradientView: UIView!

    向视图添加渐变

    func setGradient() {
        let gradient: CAGradientLayer = CAGradientLayer()
        gradient.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
        gradient.locations = [0.0 , 1.0]
        gradient.startPoint = CGPoint(x: 0.0, y: 1.0)
        gradient.endPoint = CGPoint(x: 1.0, y: 1.0)
        gradient.frame = gradientView.layer.frame
        gradientView.layer.insertSublayer(gradient, at: 0)
    }
    
  • 6

    更清晰的代码,允许您将任何 UIColor 传递给 GradientLayer 类的实例:

    class GradientLayer {
    
        let gradientLayer: CAGradientLayer
        let colorTop: CGColor
        let colorBottom: CGColor
    
        init(colorTop: UIColor, colorBottom: UIColor) {
            self.colorTop = colorTop.CGColor
            self.colorBottom = colorBottom.CGColor
            gradientLayer = CAGradientLayer()
            gradientLayer.colors = [colorTop, colorBottom]
            gradientLayer.locations = [0.0, 1.0]
        }
    }
    
  • 0

    Xcode 8.2 • Swift 3.0.2


    您可以设计自己的渐变视图,如下所示:

    @IBDesignable
    class GradientView: UIView {
    
        @IBInspectable var startColor:   UIColor = .black { didSet { updateColors() }}
        @IBInspectable var endColor:     UIColor = .white { didSet { updateColors() }}
        @IBInspectable var startLocation: Double =   0.05 { didSet { updateLocations() }}
        @IBInspectable var endLocation:   Double =   0.95 { didSet { updateLocations() }}
        @IBInspectable var horizontalMode:  Bool =  false { didSet { updatePoints() }}
        @IBInspectable var diagonalMode:    Bool =  false { didSet { updatePoints() }}
    
        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()
            updatePoints()
            updateLocations()
            updateColors()
        }
    }
    

    enter image description here

  • 5

    For swift to apply CAGradientLayer to any object (Horizontal and vertical)

    func makeGradientColor(`for` object : AnyObject , startPoint : CGPoint , endPoint : CGPoint) -> CAGradientLayer {
        let gradient: CAGradientLayer = CAGradientLayer()
    
        gradient.colors = [(UIColor(red: 59.0/255.0, green: 187.0/255.0, blue: 182.0/255.0, alpha: 1.00).cgColor), (UIColor(red: 57.0/255.0, green: 174.0/255.0, blue: 236.0/255.0, alpha: 1.00).cgColor)]
        gradient.locations = [0.0 , 1.0]
    
        gradient.startPoint = startPoint
        gradient.endPoint = endPoint
        gradient.frame = CGRect(x: 0.0, y: 0.0, width: object.frame.size.width, height: object.frame.size.height)
        return gradient
    }
    

    How to use

    let start : CGPoint = CGPoint(x: 0.0, y: 1.0)
    let end : CGPoint = CGPoint(x: 1.0, y: 1.0)
    let gradient: CAGradientLayer = self.makeGradientColor(for: vwTop, startPoint: start, endPoint: end)
    vwTop.layer.insertSublayer(gradient, at: 0)
    
    let start1 : CGPoint = CGPoint(x: 1.0, y: 1.0)
    let end1 : CGPoint = CGPoint(x: 1.0, y: 0.0)
    let gradient1: CAGradientLayer = self.makeGradientColor(for: vwTop, startPoint: start1, endPoint: end1)
    vwBottom.layer.insertSublayer(gradient1, at: 0)
    

    You can check output here

  • 1

    以下是在可重用的Util类文件中进行设置的变体

    在您的Xcode项目中:

    • 创建一个新的Swift类,将其命名为UI_Util.swift,并按如下方式填充:
    import Foundation
    import UIKit
    
    class UI_Util {
    
        static func setGradientGreenBlue(uiView: UIView) {
    
            let colorTop =  UIColor(red: 15.0/255.0, green: 118.0/255.0, blue: 128.0/255.0, alpha: 1.0).cgColor
            let colorBottom = UIColor(red: 84.0/255.0, green: 187.0/255.0, blue: 187.0/255.0, alpha: 1.0).cgColor
    
            let gradientLayer = CAGradientLayer()
            gradientLayer.colors = [ colorTop, colorBottom]
            gradientLayer.locations = [ 0.0, 1.0]
            gradientLayer.frame = uiView.bounds
    
            uiView.layer.insertSublayer(gradientLayer, at: 0)
        }
    }
    

    • 现在您可以从任何ViewController调用该函数,如下所示:
    class AbcViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()                
            UI_Util.setGradientGreen(uiView: self.view)
        }
    

    感谢katwal-Dipak对功能代码的回答

  • 0

    只是修改上面提到的答案 .

    enter image description here

    func setGradientBackground() {
        let colorTop =  UIColor(red: 255.0/255.0, green: 149.0/255.0, blue: 0.0/255.0, alpha: 1.0).CGColor
        let colorBottom = UIColor(red: 255.0/255.0, green: 94.0/255.0, blue: 58.0/255.0, alpha: 1.0).CGColor
    
        let gradientLayer = CAGradientLayer()
        gradientLayer.colors = [colorTop, colorBottom]
        gradientLayer.locations = [0.0, 1.0]
        gradientLayer.frame = self.view.bounds
    
        self.view.layer.insertSublayer(gradientLayer)
    }
    

    enter image description here

  • 20

    试试这个,它对我有用,

    var gradientView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 35))
      let gradientLayer:CAGradientLayer = CAGradientLayer()
      gradientLayer.frame.size = self.gradientView.frame.size
      gradientLayer.colors = 
      [UIColor.white.cgColor,UIColor.red.withAlphaComponent(1).cgColor] 
      //Use diffrent colors
      gradientView.layer.addSublayer(gradientLayer)
    

    enter image description here

    您可以添加渐变颜色的起点和终点 .

    gradientLayer.startPoint = CGPoint(x: 0.0, y: 1.0)
        gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)
    

    enter image description here

    有关详细说明,请参阅Best Answer或您可以按照CAGradientLayer From Apple

    希望这对某些人有帮助 .

  • 3

    如果您需要更改渐变的方向,则必须使用startPoint和endPoint .

    let gradient: CAGradientLayer = CAGradientLayer()
    
    gradient.colors = [UIColor.blue.cgColor, UIColor.red.cgColor]
    gradient.locations = [0.0 , 1.0]
    gradient.startPoint = CGPoint(x: 0.0, y: 1.0)
    gradient.endPoint = CGPoint(x: 1.0, y: 1.0)
    gradient.frame = CGRect(x: 0.0, y: 0.0, width: self.view.frame.size.width, height: self.view.frame.size.height)
    
    self.view.layer.insertSublayer(gradient, atIndex: 0)
    
  • 10

    此代码适用于 Swift 3.0

    class GradientView: UIView {
    
        override open class var layerClass: AnyClass {
            get{
                return CAGradientLayer.classForCoder()
            }
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            let gradientLayer = self.layer as! CAGradientLayer
            let color1 = UIColor.white.withAlphaComponent(0.1).cgColor as CGColor
            let color2 = UIColor.white.withAlphaComponent(0.9).cgColor as CGColor
            gradientLayer.locations = [0.60, 1.0]
            gradientLayer.colors = [color2, color1]
        }
    }
    
  • 60

    Swift3 试试这个:

    func addGradient(){
    
        let gradient:CAGradientLayer = CAGradientLayer()
        gradient.frame.size = self.viewThatHoldsGradient.frame.size
        gradient.colors = [UIColor.white.cgColor,UIColor.white.withAlphaComponent(0).cgColor] //Or any colors
        self.viewThatHoldsGradient.layer.addSublayer(gradient)
    
    }
    
  • 0

    如果你想使用HEX而不是RGBA,只需拖动一个新的空.swift并添加下面提到的代码:

    import UIKit
    
        extension UIColor {
            convenience init(rgba: String) {
                var red:   CGFloat = 0.0
                var green: CGFloat = 0.0
                var blue:  CGFloat = 0.0
                var alpha: CGFloat = 1.0
    
                if rgba.hasPrefix("#") {
                    let index   = advance(rgba.startIndex, 1)
                    let hex     = rgba.substringFromIndex(index)
                    let scanner = NSScanner(string: hex)
                    var hexValue: CUnsignedLongLong = 0
                    if scanner.scanHexLongLong(&hexValue) {
                        switch (count(hex)) {
                        case 3:
                            red   = CGFloat((hexValue & 0xF00) >> 8)       / 15.0
                            green = CGFloat((hexValue & 0x0F0) >> 4)       / 15.0
                            blue  = CGFloat(hexValue & 0x00F)              / 15.0
                        case 4:
                            red   = CGFloat((hexValue & 0xF000) >> 12)     / 15.0
                            green = CGFloat((hexValue & 0x0F00) >> 8)      / 15.0
                            blue  = CGFloat((hexValue & 0x00F0) >> 4)      / 15.0
                            alpha = CGFloat(hexValue & 0x000F)             / 15.0
                        case 6:
                            red   = CGFloat((hexValue & 0xFF0000) >> 16)   / 255.0
                            green = CGFloat((hexValue & 0x00FF00) >> 8)    / 255.0
                            blue  = CGFloat(hexValue & 0x0000FF)           / 255.0
                        case 8:
                            red   = CGFloat((hexValue & 0xFF000000) >> 24) / 255.0
                            green = CGFloat((hexValue & 0x00FF0000) >> 16) / 255.0
                            blue  = CGFloat((hexValue & 0x0000FF00) >> 8)  / 255.0
                            alpha = CGFloat(hexValue & 0x000000FF)         / 255.0
                        default:
                            print("Invalid RGB string, number of characters after '#' should be either 3, 4, 6 or 8")
                        }
                    } else {
                        println("Scan hex error")
                    }
                } else {
                    print("Invalid RGB string, missing '#' as prefix")
                }
                self.init(red:red, green:green, blue:blue, alpha:alpha)
            }
    }
    

    同样,拖动另一个空的.swift文件并添加下面提到的代码:

    class Colors {
        let colorTop = UIColor(rgba: "##8968CD").CGColor
        let colorBottom = UIColor(rgba: "#5D478B").CGColor
    
        let gl: CAGradientLayer
    
        init() {
            gl = CAGradientLayer()
            gl.colors = [ colorTop, colorBottom]
            gl.locations = [ 0.0, 1.0]
        }
    }
    

    之后在视图控制器中,在类下实例化你的'Color'类,如下所示:

    let colors = Colors()
    

    添加新功能:

    func refresh() {
            view.backgroundColor = UIColor.clearColor()
            var backgroundLayer = colors.gl
            backgroundLayer.frame = view.frame
            view.layer.insertSublayer(backgroundLayer, atIndex: 0)
        }
    

    在viewDidLoad中声明该函数:

    refresh()
    

    你完成了:))与RGBA相比,使用HEX太简单了 . :d

  • 0

    易于使用的swift 3扩展

    extension CALayer {
        func addGradienBorder(colors:[UIColor] = [UIColor.red,UIColor.blue], width:CGFloat = 1) {
            let gradientLayer = CAGradientLayer()
            gradientLayer.frame =  CGRect(origin: .zero, size: self.bounds.size)
            gradientLayer.startPoint = CGPoint(x:0.0, y:0.5)
            gradientLayer.endPoint = CGPoint(x:1.0, y:0.5)
            gradientLayer.colors = colors.map({$0.cgColor})
    
            let shapeLayer = CAShapeLayer()
            shapeLayer.lineWidth = width
            shapeLayer.path = UIBezierPath(rect: self.bounds).cgPath
            shapeLayer.fillColor = nil
            shapeLayer.strokeColor = UIColor.black.cgColor
            gradientLayer.mask = shapeLayer
    
            self.addSublayer(gradientLayer)
        }
    }
    

    用于你的观点,例如

    yourView.addGradienBorder(color: UIColor.black, opacity: 0.1, offset: CGSize(width:2 , height: 5), radius: 3, viewCornerRadius: 3.0)
    
  • 0

    我想为视图添加渐变,然后使用自动布局锚定它 .

    class GradientView: UIView {
    
        private let gradient: CAGradientLayer = {
            let layer = CAGradientLayer()
            let topColor: UIColor = UIColor(red:0.98, green:0.96, blue:0.93, alpha:0.5)
            let bottomColor: UIColor = UIColor.white
            layer.colors = [topColor.cgColor, bottomColor.cgColor]
            layer.locations = [0,1]
            return layer
        }()
    
        init() {
            super.init(frame: .zero)
            gradient.frame = frame
            layer.insertSublayer(gradient, at: 0)
        }
    
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    
        override func layoutSubviews() {
            super.layoutSubviews()
            gradient.frame = bounds
    
        }
    }
    
  • 3

    这是一个快速扩展,您可以传递任意数量的任意颜色 . 它会在插入之前删除任何先前的渐变,如果需要,它将返回新插入的渐变层以供进一步操作:

    extension UIView {
    
        /**
         Given an Array of CGColor, it will:
            - Remove all sublayers of type CAGradientLayer.
            - Create and insert a new CAGradientLayer.
    
         - Parameters: 
            - colors: An Array of CGColor with the colors for the gradient fill
    
         - Returns: The newly created gradient CAGradientLayer
         */
        func layerGradient(colors c:[CGColor])->CAGradientLayer {
            self.layer.sublayers = self.layer.sublayers?.filter(){!($0 is CAGradientLayer)}
            let layer : CAGradientLayer = CAGradientLayer()
            layer.frame.size = self.frame.size
            layer.frame.origin = CGPointZero
            layer.colors = c
            self.layer.insertSublayer(layer, atIndex: 0)
            return layer
        }
    }
    
  • 0

    如果您有查看集合(多视图),请执行此操作

    func setGradientBackground() {
        let v:UIView
        for v in viewgradian
        //here viewgradian is your view Collection Outlet name
        {
            let layer:CALayer
            var arr = [AnyObject]()
            for layer in v.layer.sublayers!
            {
               arr.append(layer)
            }
    
            let colorTop = UIColor(red: 216.0/255.0, green: 240.0/255.0, blue: 244.0/255.0, alpha: 1.0).cgColor
            let colorBottom = UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0).cgColor
            let gradientLayer = CAGradientLayer()
            gradientLayer.colors = [ colorBottom, colorTop]
            gradientLayer.startPoint = CGPoint(x: 1.0, y: 0.0)
            gradientLayer.endPoint = CGPoint(x: 0.0, y: 1.0)
            gradientLayer.frame = v.bounds
            v.layer.insertSublayer(gradientLayer, at: 0)
        }
    }
    
  • 17

    您为渐变提供的颜色必须是 CGColor 类型 . 因此,将 CGColor 数组设置为 gl.colors .

    正确的代码是:

    class Colors {
        var gl:CAGradientLayer!
    
        init() {
            let colorTop = UIColor(red: 192.0 / 255.0, green: 38.0 / 255.0, blue: 42.0 / 255.0, alpha: 1.0).cgColor
            let colorBottom = UIColor(red: 35.0 / 255.0, green: 2.0 / 255.0, blue: 2.0 / 255.0, alpha: 1.0).cgColor
    
            self.gl = CAGradientLayer()
            self.gl.colors = [colorTop, colorBottom]
            self.gl.locations = [0.0, 1.0]
        }
    }
    

相关问题