功能: 实现视图添加渐变背景及边框
//
// ViewTool.swift
// EXOTerra
//
// Created by huang zhengguo on 2020/10/16.
// Copyright © 2020 huang zhengguo. All rights reserved.
//
import Foundation
// 视图工具类
class ViewTool {
/**
* 设置默认渐变色边框
*
* @param view 要设置的视图
*
*/
static func setDefaultBorder(view: UIView) -> Void {
self.setDefaultBorder(view: view, borderWidth: 2.0)
}
/**
* 设置渐变色边框
*
* @param view 要设置的视图
* @param borderWidth 边框宽度
*
*/
static func setDefaultBorder(view: UIView, borderWidth: CGFloat) -> Void {
let cornerRadius = view.layer.cornerRadius
let viewHeight = view.frame.size.height
let viewWidth = view.frame.size.width
// 绘制左边框
self.setGradientBackgroundColor(view: view, frame: CGRect.init(x: 0, y: cornerRadius, width: borderWidth, height: viewHeight - 2 * cornerRadius), colors: [GlobalConstant.GRADIENT_START_COLOR, GlobalConstant.GRADIENT_START_COLOR], horizontal: true)
// 绘制右边框
self.setGradientBackgroundColor(view: view, frame: CGRect.init(x: viewWidth - borderWidth, y: cornerRadius, width: borderWidth, height: viewHeight - 2 * cornerRadius), colors: [GlobalConstant.GRADIENT_END_COLOR, GlobalConstant.GRADIENT_END_COLOR], horizontal: true)
// 绘制上边框
self.setGradientBackgroundColor(view: view, frame: CGRect.init(x: cornerRadius, y: 0.0, width: viewWidth - 2 * cornerRadius, height: borderWidth), colors: [GlobalConstant.GRADIENT_START_COLOR, GlobalConstant.GRADIENT_END_COLOR], horizontal: true)
// 绘制底边框
self.setGradientBackgroundColor(view: view, frame: CGRect.init(x: cornerRadius, y: viewHeight - borderWidth, width: viewWidth - 2 * cornerRadius, height: borderWidth), colors: [GlobalConstant.GRADIENT_START_COLOR, GlobalConstant.GRADIENT_END_COLOR], horizontal: true)
}
/*
* 设置视图垂直渐变背景色
*
* @param view 要设置的视图
* @param frame 区域大小
* @param cornerRadius 圆角
*
*/
static func setDefaultVerticalGradientBackgroundColor(view: UIView, frame: CGRect, cornerRadius: CGFloat = 0.0) -> Void {
setGradientBackgroundColor(view: view, frame: frame, colors: [GlobalConstant.GRADIENT_START_COLOR, GlobalConstant.GRADIENT_END_COLOR], horizontal: false, cornerRadius: cornerRadius)
}
/*
* 设置视图渐变背景色
*
* @param view 要设置的视图
* @param frame 区域大小
* @param cornerRadius 圆角
*
*/
static func setDefaultHorizontalGradientBackgroundColor(view: UIView, frame: CGRect, cornerRadius: CGFloat = 0.0) -> Void {
setGradientBackgroundColor(view: view, frame: frame, colors: [GlobalConstant.GRADIENT_START_COLOR, GlobalConstant.GRADIENT_END_COLOR], horizontal: true, cornerRadius: cornerRadius)
}
/*
* 移除视图渐变背景色
*
* @param view 要设置的视图
*
*/
static func removeGradientColorBackground(view: UIView) -> Void {
if view.layer.sublayers == nil {
return;
}
var layersToRemove: [CAGradientLayer] = [CAGradientLayer]()
for layer in view.layer.sublayers! {
if layer.isKind(of: CAGradientLayer.self) {
layersToRemove.append(layer as! CAGradientLayer)
}
}
for layer in layersToRemove {
layer.removeFromSuperlayer()
}
}
/*
* 设置视图渐变背景色
*
* @param view 要设置的视图
* @param frame 区域大小
* @param colors 渐变颜色数组
* @param horizontal 渐变方向
* @param cornerRadius 圆角大小
*
*/
static func setGradientBackgroundColor(view: UIView, frame: CGRect, colors: [CGColor], horizontal: Bool, cornerRadius: CGFloat = 0.0) -> Void {
let startPoint = CGPoint.init(x: 0.0, y: 0.0)
var endPoint = CGPoint.init(x: 1.0, y: 0.0)
if horizontal == false {
endPoint = CGPoint.init(x: 0.0, y: 1.0)
}
let gradientLayer: CAGradientLayer = getGradientLayer(frame: frame, startPoint: startPoint, endPoint: endPoint, locations: [ 0.0, 1.0], colors: colors)
gradientLayer.zPosition = -10000
gradientLayer.cornerRadius = cornerRadius
view.layer.addSublayer(gradientLayer)
}
/**
*
* 获取一个颜色渐变层
*
* @param frame 大小
* @param startPoint 颜色渐变起点
* @param endPoint 颜色渐变终点
* @param locations 颜色数组对应的点
* @param colors 渐变颜色数组
*
* @return 颜色渐变层
*
*/
static func getGradientLayer(frame: CGRect, startPoint: CGPoint, endPoint: CGPoint, locations: [NSNumber], colors: [CGColor]) -> CAGradientLayer {
let gradientLayer = CAGradientLayer.init()
gradientLayer.frame = frame
gradientLayer.startPoint = startPoint
gradientLayer.endPoint = endPoint
gradientLayer.locations = locations
gradientLayer.colors = colors
return gradientLayer
}
}