swift扩展实现UIView渐变色

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()
                }
            }
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,852评论 4 61
  • 生活是一场微小而盛大的遇见 遇见你 是时光之里最温暖的美好 只可惜 一切的因缘际会 抵不过 旅程的千山万水 你我之...
    洋洋周_阅读 951评论 2 3
  • 雪儿是我在群里认识的一个丫头,一来二去便也相熟了许多。晚上的时候便聊了起来,丫头的心情明显不佳,仔细问起来,才晓...
    明月何曾是两乡阅读 753评论 0 1
  • 女儿喜欢游泳,但爸妈都是旱鸭子。 昨天,她拿了一杯水放在阳台上晒。晒了一会,拿进屋里跟我说:“妈妈,可以去游泳了。...
    悦享书生活阅读 360评论 9 3

友情链接更多精彩内容