1
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
import UIKit
|
||||
class XdBlur {
|
||||
/// 为视图添加背景模糊效果
|
||||
/// - Parameters:
|
||||
/// - view: 需要添加模糊效果的目标视图
|
||||
/// - style: 模糊样式(Light, Dark, ExtraLight)
|
||||
/// - intensity: 模糊强度,范围 0-1
|
||||
/// - backgroundColor: 可选的背景颜色叠加
|
||||
static func applyBlur(
|
||||
to view: UIView,
|
||||
style: UIBlurEffect.Style = .light,
|
||||
intensity: CGFloat = 0.8,
|
||||
backgroundColor: UIColor? = nil
|
||||
) {
|
||||
// 移除之前可能存在的模糊效果
|
||||
view.subviews
|
||||
.filter { $0 is UIVisualEffectView }
|
||||
.forEach { $0.removeFromSuperview() }
|
||||
|
||||
// 创建模糊效果
|
||||
let blurEffect = UIBlurEffect(style: style)
|
||||
let blurView = UIVisualEffectView(effect: blurEffect)
|
||||
|
||||
// 调整模糊强度
|
||||
if #available(iOS 13.0, *) {
|
||||
let vibrancyView = UIVisualEffectView(effect:
|
||||
UIVibrancyEffect(blurEffect: blurEffect, style: .fill)
|
||||
)
|
||||
blurView.contentView.addSubview(vibrancyView)
|
||||
}
|
||||
|
||||
// 设置frame与目标视图一致
|
||||
blurView.frame = view.bounds
|
||||
blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||||
|
||||
// 设置透明度控制模糊强度
|
||||
blurView.alpha = intensity
|
||||
|
||||
// 如果需要叠加背景色
|
||||
if let backgroundColor = backgroundColor {
|
||||
let colorView = UIView(frame: blurView.bounds)
|
||||
colorView.backgroundColor = backgroundColor
|
||||
colorView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||||
blurView.contentView.addSubview(colorView)
|
||||
}
|
||||
|
||||
// 插入到视图底部
|
||||
view.insertSubview(blurView, at: 0)
|
||||
}
|
||||
|
||||
/// 移除背景模糊效果
|
||||
/// - Parameter view: 需要移除模糊效果的视图
|
||||
static func removeBlur(from view: UIView) {
|
||||
view.subviews
|
||||
.filter { $0 is UIVisualEffectView }
|
||||
.forEach { $0.removeFromSuperview() }
|
||||
}
|
||||
|
||||
/// 为视图添加自定义高斯模糊效果
|
||||
/// - Parameters:
|
||||
/// - view: 目标视图
|
||||
/// - radius: 模糊半径
|
||||
/// - tintColor: 颜色叠加
|
||||
static func applyCustomBlur(
|
||||
to view: UIView,
|
||||
radius: CGFloat = 10,
|
||||
tintColor: UIColor? = nil
|
||||
) {
|
||||
// 创建模糊效果
|
||||
let blurEffect = UIBlurEffect(style: .light)
|
||||
let blurView = UIVisualEffectView(effect: blurEffect)
|
||||
|
||||
// 应用额外的模糊
|
||||
let vibrancyView = UIVisualEffectView(effect:
|
||||
UIVibrancyEffect(blurEffect: blurEffect)
|
||||
)
|
||||
|
||||
blurView.frame = view.bounds
|
||||
blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||||
|
||||
// 添加自定义颜色叠加
|
||||
if let tintColor = tintColor {
|
||||
let colorView = UIView(frame: blurView.bounds)
|
||||
colorView.backgroundColor = tintColor
|
||||
colorView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||||
blurView.contentView.addSubview(colorView)
|
||||
}
|
||||
|
||||
view.insertSubview(blurView, at: 0)
|
||||
}
|
||||
|
||||
static func applyBlurSelf(ele: UIView ,bg:UIView, blur: CGFloat, backgroundColor: UIColor = .clear) {
|
||||
// Create snapshot of element
|
||||
UIGraphicsBeginImageContextWithOptions(ele.bounds.size, false, 0)
|
||||
ele.layer.render(in: UIGraphicsGetCurrentContext()!)
|
||||
let snapshot = UIGraphicsGetImageFromCurrentImageContext()!
|
||||
UIGraphicsEndImageContext()
|
||||
|
||||
// Create blur effect
|
||||
let effectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
|
||||
effectView.frame = bg.bounds
|
||||
|
||||
// Create color overlay
|
||||
let colorView = UIView(frame: bg.bounds)
|
||||
colorView.backgroundColor = backgroundColor
|
||||
colorView.alpha = blur
|
||||
|
||||
// Add views to background
|
||||
bg.addSubview(effectView)
|
||||
bg.addSubview(colorView)
|
||||
|
||||
// Set snapshot as background
|
||||
let imageView = UIImageView(image: snapshot)
|
||||
imageView.frame = bg.bounds
|
||||
bg.insertSubview(imageView, at: 0)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user