zoukankan      html  css  js  c++  java
  • swift

    知道控件的frame ,创建控件时候直接加上 渐变色

        // 创建背景渐变色button(通用于View or Controller底部按钮),bounds计算后传入
        static func createGradientButton(font: UIFont = UIFont.systemFont(ofSize: 14), textColor: UIColor = UIColor.white, titleStr: String? = nil,bounds:CGRect) -> UIbutton {
            let btn = UIButton(type: .custom)
            btn.translatesAutoresizingMaskIntoConstraints = false
            btn.setTitle(titleStr, for: .normal)
            btn.titleLabel?.font = font
            btn.setTitleColor(textColor, for: .normal)
            btn.backgroundColor = UIColor.clear
            let caGradientLayer:CAGradientLayer = CAGradientLayer()
            caGradientLayer.colors = [UIColor(hexString: "#E0AD7D").cgColor,UIColor(hexString: "#FFE8C9").cgColor]
            caGradientLayer.locations = [0, 1]
            caGradientLayer.startPoint = CGPoint(x: 0, y: 1)
            caGradientLayer.endPoint = CGPoint(x: 0.8, y: 1)
            caGradientLayer.frame = bounds
            btn.layer.insertSublayer(caGradientLayer, at: 0)
            return btn
        }
    

      

    2. 不知道 frame

    1。创建 渐变色

       /// 渐变色:默认从上到下
        private var gradientLayer: CAGradientLayer = {
            let g = CAGradientLayer()
            g.colors = [UIColor.init(hexColor: "DBB479").cgColor,
                            UIColor.init(hexColor: "F7E1B3").cgColor]
            //改为从左到右 的渐变
            g.startPoint = CGPoint(x: 0, y: 0)
            g.endPoint = CGPoint(x: 1, y: 0)
            return g
        }()
    

      

    2.给指定view 添加渐变色

        /// 荣誉背景图
        private lazy var credibilityBgView : UIView = {
            let v = UIView()
            v.layer.addSublayer(self.gradientLayer)
            v.translatesAutoresizingMaskIntoConstraints = false
            v.layer.cornerRadius = 5
            v.layer.masksToBounds = true
            v.isUserInteractionEnabled = true
            v.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(clcikCredibilityBgView)))
            return v
        }()
    

      

    3. 在自定义的view中 设置 渐变色frame:draw

        override func draw(_ rect: CGRect) {
            super.draw(rect)
            gradientLayer.frame = credibilityBgView.bounds
        }
    

    4.如果在控制器里面,viewDidLayoutSubviews

     override func viewDidLayoutSubviews() {
            super.viewDidLayoutSubviews()
            nextBtnAddLayer()
        }
    
        /// 下一步按钮添加渐变色
        func nextBtnAddLayer(){
            let gradient = CAGradientLayer()
            gradient.colors = [UIColor.init(hexString: "#FD904B").cgColor,
                               UIColor.init(hexString: "#FFA64D").cgColor ]
            //改为从左到右 的渐变
            gradient.startPoint = CGPoint(x: 0, y: 0)
            gradient.endPoint = CGPoint(x: 1, y: 0)
            nextBtn.layer.insertSublayer(gradient, at: 0)
            gradient.frame = nextBtn.bounds
        }
    

      

    注意 直接用addSubLayer 会遮盖住 子控件, 使用insertSublayer 不会有问题

      

    上面 是同一个渐变色的 colors 更换,  

        //渐变色
        private lazy var caGradientLayer : CAGradientLayer = {
            let caGradientLayer:CAGradientLayer = CAGradientLayer()
            caGradientLayer.colors = []
            caGradientLayer.locations = [0, 1]
            caGradientLayer.startPoint = CGPoint(x: 0, y: 1)
            caGradientLayer.endPoint = CGPoint(x: 0.8, y: 1)
            return caGradientLayer
        }()
    
        /// 渐变色颜色
        private lazy var cgColors: (normal: [CGColor] , select: [CGColor] ) = ([] , [])
    
    
        /// 渐变色 更改 颜色
        /// - Parameters:
        ///   - basicAnimationKeyPath: 动画对应的唯一标示
        ///   - animationKey: 渐变色 添加的 动画 唯一标示
        ///   - toChangeColors: 改变的颜色数组
        ///   - duration: 动画时间
        private func addAnimationForCaGradientLayer(basicAnimationKeyPath:String,
                                                    animationKey:String,
                                                    toChangeColors:[CGColor],
                                                    durationTime:CFTimeInterval = 0.05){
            //添加渐变动画
            let colorChangeAnimation = CABasicAnimation(keyPath: basicAnimationKeyPath)
            colorChangeAnimation.delegate = self
            colorChangeAnimation.duration = durationTime
            colorChangeAnimation.toValue = toChangeColors
            colorChangeAnimation.fillMode = CAMediaTimingFillMode .forwards
            colorChangeAnimation.isRemovedOnCompletion = false
            caGradientLayer.add(colorChangeAnimation, forKey: animationKey)
        }
    
    
    开始定时器是
            self.addAnimationForCaGradientLayer(basicAnimationKeyPath: "colorSelected", animationKey: "colorChangeToSelected", toChangeColors: self.cgColors.select)
    
    然后倒计时结束的时候
                self.setTitle("重新发送", for: .normal)
                self.addAnimationForCaGradientLayer(basicAnimationKeyPath: "colorNormal", animationKey: "colorChangeToNormal", toChangeColors: self.cgColors.normal)
    

      

  • 相关阅读:
    黑马程序员_使用Jquery实现AJAX功能
    BootStrap 推荐网站
    工具类
    ExtJS 模块案例(增删改查)
    sql server 经典语句。~转 (入门必看)
    sql 时间格式转换
    转载wuhuacong(伍华聪)的专栏 利用Aspose.Word控件实现Word文档的操作 (留作笔记)
    c#操作Word文件 导出数据到word文档 (table 书签方式)
    ExtJs之格式化(Ext.util.Format) ~转
    查询/修改XML里某个字段的值
  • 原文地址:https://www.cnblogs.com/qingzZ/p/10108797.html
Copyright © 2011-2022 走看看