今天第一天上班,也是第一次在简书上写文章,记录一下工作中遇到的问题,方便今后查阅。
主要遇到的问题就是在项目中要自定义按钮的渐变色,为了缩小工程,美术小姐姐也没给图片,只能用代码来实现了。了解了一下按钮的结构后,实现渐变的主要功能就是把渐变颜色设置成背景图片。
首先设置渐变颜色。用到的是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开发的道路上越走越远,越飞越高。