为 UIVisualEffectView 添加阴影效果

此种方式不会在 UIVisualEffectView 下产生阴影颜色,而是围绕 UIVisualEffectView 生成的阴影效果。

/// UIVisualEffectView 设置阴影
    open func setup(_ blurEffectView: UIVisualEffectView, rect: CGRect, color: UIColor = .lightGray, offset: CGSize = .zero, opacity: Float = 0.5, radius: CGFloat = 3) {
        
        let shadowLayer = CALayer()
        
        let mutablePath = CGMutablePath()
        let maskLayer = CAShapeLayer()
        
        let rect = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: blurEffectView.frame.height)
        let shadowPath = UIBezierPath(rect: rect).cgPath
        
        let shadowFrame = rect.insetBy(dx: -2 * radius, dy: -2 * radius).offsetBy(dx: offset.width, dy: offset.height)
        let shadowRect = CGRect(origin: .zero, size: shadowFrame.size)
        let shadowTransform = CGAffineTransform(translationX: -rect.origin.x - offset.width + 2 * radius, y: -rect.origin.y - offset.height + 2 * radius)
        
        shadowLayer.shadowPath = shadowPath
        shadowLayer.shadowOffset = offset
        shadowLayer.shadowOpacity = opacity
        shadowLayer.shadowRadius = radius
        shadowLayer.shadowColor = color.cgColor
        
        mutablePath.addRect(shadowRect)
        mutablePath.addPath(shadowLayer.shadowPath!, transform: shadowTransform)
        mutablePath.closeSubpath()
        
        maskLayer.frame = shadowFrame
        maskLayer.fillRule = kCAFillRuleEvenOdd
        maskLayer.path = mutablePath
        
        shadowLayer.mask = maskLayer
        
        blurEffectView.layer.superlayer?.insertSublayer(shadowLayer, above: blurEffectView.layer)
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,079评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,194评论 4 61
  • 倚杖南山望,云低万壑暝。 孤舟横野渡,归雁落寒汀。 林花繁复谢,白发醉难醒。 绿绮弦空断,何人侧耳听?
    青蔓阅读 858评论 3 1
  • 2016年的最后一天终于来了!回想起今年从年初到现在的前一分钟,我想对姐妹们说的话一天一夜也说不完。就算是我到了4...
    高桥美莎阅读 3,269评论 9 21