美文网首页@IT·互联网iOS学习iOS技术
iOS按钮颜色渐变代码实现

iOS按钮颜色渐变代码实现

作者: 攞天炽 | 来源:发表于2018-05-31 16:55 被阅读167次

今天第一天上班,也是第一次在简书上写文章,记录一下工作中遇到的问题,方便今后查阅。
主要遇到的问题就是在项目中要自定义按钮的渐变色,为了缩小工程,美术小姐姐也没给图片,只能用代码来实现了。了解了一下按钮的结构后,实现渐变的主要功能就是把渐变颜色设置成背景图片。
首先设置渐变颜色。用到的是CAGradientLayer类,代码如下,因为项目中多处用到,所以就封装成了函数,写在了UIcolor的类拓展里,一共有2种方式,左右和上下渐变,默认是从中间开始,可以自己调节的。

//左右渐变
    public class func setGradualLeftToRightColor(view:UIView,fromColor:UIColor,toCololr:UIColor,loactions:[NSNumber]=[0.5,0.0]) -> CAGradientLayer {
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = view.bounds
        //  创建渐变色数组,需要转换为CGColor颜色
        gradientLayer.colors = [fromColor.cgColor,toCololr.cgColor]
        //  设置渐变颜色方向,左上点为(0,0), 右下点为(1,1)
        gradientLayer.startPoint = CGPoint(x: 0, y: 0)
        gradientLayer.endPoint =  CGPoint(x: 1, y: 0)
        //  设置颜色变化点,取值范围 0.0~1.0
        gradientLayer.locations = loactions
        return gradientLayer
    }

public class func setGradualChangingColor(view:UIView,fromColor:UIColor,toCololr:UIColor,loactions:[NSNumber]=[0,0.5]) -> CAGradientLayer {
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = view.bounds
        //  创建渐变色数组,需要转换为CGColor颜色
        gradientLayer.colors = [fromColor.cgColor,toCololr.cgColor]
        //  设置渐变颜色方向,左上点为(0,0), 右下点为(1,1)
        gradientLayer.startPoint = CGPoint(x: 0, y: 0)
        gradientLayer.endPoint =  CGPoint(x: 0, y: 1)
        //  设置颜色变化点,取值范围 0.0~1.0
        gradientLayer.locations = loactions
        return gradientLayer
    }

颜色设置好之后,创建button,设置背景图片。

            let btn = UIButton(frame:CGRect(x: 20,y: 25,width: APP_SCREEN_WIDTH-20*2,height: 44*APP_SCALE))
            //创建一个视图
            let btnBg = UIView(frame:createAnchor_btn.bounds) 
            let layer = UIColor.setGradualLeftToRightColor(view: createAnchor_btn, fromColor: UIColor.hexStringToColor("#FD6DD1"), toCololr: UIColor.hexStringToColor("#F83C8C"),loactions: [0.6,0.0])
            btnBg.layer.addSublayer(layer)
            //将视图转化成按钮的BackgroundImage
            btn.setBackgroundImage(btnBg.convertToImage(), for: UIControlState())
            btn.setTitleColor(APP_COLOR_WHITE, for: UIControlState())
            btn.setTitleColor(AppAlphaColor(APP_COLOR_WHITE, alpha: 0.5), for: UIControlState.highlighted)
            btn.titleLabel?.font = APP_TEXT_FONT_16
            btn.setTitle(localized("user_create_anchor"), for: UIControlState())
            self.view.addSubview(createAnchor_btn)

上面将视图转化为image的方法在工程里也常常用到,所以也将其封装起来了。写在了UIview的类拓展里。YYKit类库封装了这个方法,可以直接拿来用。

 //UIView 转化为 UIImage
    func convertToImage() -> UIImage{
        UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.main.scale)
        var image = UIImage()
        if let context = UIGraphicsGetCurrentContext(){
            self.layer.render(in: context)
            image = UIGraphicsGetImageFromCurrentImageContext()!
        }
        UIGraphicsEndImageContext()
        return image
    }

以上就是实现了按钮颜色渐变的功能。与君共勉,希望在iOS开发的道路上越走越远,越飞越高。

相关文章

网友评论

  • 爱打码滴小燕子:为什么需要再转换成图片呀?可不可以直接对按钮进行 btn.layer.addSublayer(layer)?
    爱打码滴小燕子:@攞天炽 我试的是可以的呀~:smiley: 六一同乐,哈哈
    攞天炽:还有,六一快乐哈
    攞天炽:@爱打码滴小燕子 之前也试过直接在btn.layer上加,但是没有渐变的颜色。你可以试一下看看。

本文标题:iOS按钮颜色渐变代码实现

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