Swift - 毛玻璃以及颜色渐变

1,776 阅读1分钟

毛玻璃效果代码例子如下:

let testView = UIView(frame: CGRect(x: self.view.frame.width/2 - 100, y: self.view.frame.height/2 - 100, width: 200, height: 200))
testView.backgroundColor = UIColor(red: 249/255.0, green: 249/255.0, blue: 249/255.0, alpha: 0.7)
        
//毛玻璃
let  blurEffect =  UIBlurEffect (style: .light )
let  blurView =  UIVisualEffectView (effect: blurEffect)
//给毛玻璃添加背景颜色以及透明度
blurView.backgroundColor = UIColor(red: 249/255.0, green: 249/255.0, blue: 249/255.0, alpha: 0.3)
blurView.frame.size =  CGSize (width: testView.frame.width, height: testView.frame.height)

testView.addSubview(blurView)

实现颜色渐变代码方法如下:

func createGradientLayer(startColor : UIColor, endColor : UIColor, width : CGFloat, height : CGFloat) -> UIImage{
    let layer : CAGradientLayer = CAGradientLayer ()
    let gradientColors: [CGColor] = [startColor.cgColor, endColor.cgColor]
    let gradientLocations: [NSNumber] = [0.0, 1.0]
    layer.colors = gradientColors
    layer.locations = gradientLocations
    
    layer.startPoint = CGPoint(x: 0, y: 0)
    layer.endPoint = CGPoint(x: 1, y: 0)
    
    layer.frame = CGRect(x: 0, y: 0, width: width, height: height)
    UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, 0)
    if let context = UIGraphicsGetCurrentContext() {
        layer.render(in: context)
    }
        
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image!
}

使用方式如下

let testView = UIView(frame: CGRect(x: self.view.frame.width/2 - 100, y: self.view.frame.height/2 - 100, width: 200, height: 200))
testView.backgroundColor = UIColor(patternImage: createGradientLayer(startColor: .yellow, endColor: .black, width: 200, height: 200))

更多颜色、更多描点

//生成渐变色图片,参数一传递的是线性的点,参数二传递的是颜色,参数三传递的是生成的大小(颜色必须大于2)
    func createGradientLayer(points: [CGPoint],colors: [CGColor], size: CGSize) -> UIImage{
        let layer : CAGradientLayer = CAGradientLayer ()
        let gradientColors: [CGColor] = colors
        layer.colors = gradientColors
        
        let gradientLocations: [NSNumber] = [0.0,1.0]
        layer.locations = gradientLocations
        
        layer.startPoint = points[0]
        for index in 1 ..< (colors.count - 1) {
            layer.anchorPoint = points[index]
        }
        layer.endPoint = points[colors.count - 1]
        
        layer.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height)
        UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, 0)
        if let context = UIGraphicsGetCurrentContext() {
            context.strokePath()
            context.setStrokeColor(UIColor.black.cgColor)
            layer.render(in: context)
        }
            
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image!
    }