美文网首页
swift扩展实现UIView渐变色

swift扩展实现UIView渐变色

作者: 秦枫桀 | 来源:发表于2017-10-20 12:39 被阅读0次

    UIView渐变色 , UIView及其子类都可以使用,比如UIButton、UILabel等。

    代码如下:

    //
    //  UIView+Gradient.swift
    //  NEOKit
    //
    //  Created by 秦伟 on 2017/10/19.
    //
    // UIView 渐变色 , UIView及其子类都可以使用,比如UIButton、UILabel等。
    //
    // Usage:
    // myButton.gradientColor(CGPoint(x: 0, y: 0.5), CGPoint(x: 1, y: 0.5), [UIColor(hex: "#FF2619").cgColor, UIColor(hex: "#FF8030").cgColor])
    
    import UIKit
    
    public extension UIView {
        
        // MARK: 添加渐变色图层
        public func gradientColor(_ startPoint: CGPoint, _ endPoint: CGPoint, _ colors: [Any]) {
            
            guard startPoint.x >= 0, startPoint.x <= 1, startPoint.y >= 0, startPoint.y <= 1, endPoint.x >= 0, endPoint.x <= 1, endPoint.y >= 0, endPoint.y <= 1 else {
                return
            }
            
            // 外界如果改变了self的大小,需要先刷新
            layoutIfNeeded()
            
            var gradientLayer: CAGradientLayer!
            
            removeGradientLayer()
    
            gradientLayer = CAGradientLayer()
            gradientLayer.frame = self.layer.bounds
            gradientLayer.startPoint = startPoint
            gradientLayer.endPoint = endPoint
            gradientLayer.colors = colors
            gradientLayer.cornerRadius = self.layer.cornerRadius
            gradientLayer.masksToBounds = true
            // 渐变图层插入到最底层,避免在uibutton上遮盖文字图片
            self.layer.insertSublayer(gradientLayer, at: 0)
            self.backgroundColor = UIColor.clear
            // self如果是UILabel,masksToBounds设为true会导致文字消失
            self.layer.masksToBounds = false
        }
        
        // MARK: 移除渐变图层
        // (当希望只使用backgroundColor的颜色时,需要先移除之前加过的渐变图层)
        public func removeGradientLayer() {
            if let sl = self.layer.sublayers {
                for layer in sl {
                    if layer.isKind(of: CAGradientLayer.self) {
                        layer.removeFromSuperlayer()
                    }
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:swift扩展实现UIView渐变色

          本文链接:https://www.haomeiwen.com/subject/ygtvuxtx.html