You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 5 如何调整UIBlurEffect实现的UIView模糊深度(半径)

Swift 调整UIVisualEffectView模糊深度方案

原生UIBlurEffect默认不直接暴露修改模糊半径的公开API,可根据你的最低兼容iOS版本选择对应实现方案:

方案1:iOS 15+ 官方原生方案(最稳定)

iOS 15及以上系统苹果提供了支持自定义模糊半径的构造方法,直接传入你需要的半径数值即可,数值越小模糊度越低:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    
    guard #available(iOS 15.0, *) else { return }
    // 第二个参数radius为模糊半径,系统默认light样式模糊半径约为20,可自行调小降低模糊度
    let blurEffect = UIBlurEffect(style: .light, radius: 10)
    let blurView = UIVisualEffectView(effect: blurEffect)
    blurView.translatesAutoresizingMaskIntoConstraints = false
    view.insertSubview(blurView, at: 0)
    
    NSLayoutConstraint.activate([
      blurView.topAnchor.constraint(equalTo: view.topAnchor),
      blurView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
      blurView.heightAnchor.constraint(equalTo: view.heightAnchor),
      blurView.widthAnchor.constraint(equalTo: view.widthAnchor)
    ])
}

方案2:全版本兼容Hack方案

如果需要兼容iOS 15以下版本,可以利用UIVisualEffectView的动画过渡特性,让模糊效果停在从无到有过程的中间状态,间接控制模糊深度:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    
    let blurEffect = UIBlurEffect(style: .light)
    // 初始效果设为nil,后续通过动画控制进度
    let blurView = UIVisualEffectView(effect: nil)
    blurView.translatesAutoresizingMaskIntoConstraints = false
    view.insertSubview(blurView, at: 0)
    
    NSLayoutConstraint.activate([
      blurView.topAnchor.constraint(equalTo: view.topAnchor),
      blurView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
      blurView.heightAnchor.constraint(equalTo: view.heightAnchor),
      blurView.widthAnchor.constraint(equalTo: view.widthAnchor)
    ])
    
    // 模糊比例取值范围0~1,0为完全不模糊,1为系统默认最大模糊度
    let blurProgress: CGFloat = 0.3
    UIView.animate(withDuration: 0, delay: 0, options: .allowUserInteraction) {
        blurView.effect = blurEffect
    } completion: { _ in
        blurView.layer.speed = 0
        blurView.layer.timeOffset = blurProgress
    }
}

注意事项:

  • 该方案属于非官方用法,存在后续系统版本更新后失效的风险
  • 后续需要调整模糊度时,直接修改blurProgress数值即可

方案3:自定义高斯模糊实现

如果对模糊效果可控性要求更高,可以对目标视图截图后使用CoreImage的高斯模糊滤镜自行处理,完全自定义模糊半径,不受系统版本限制,缺点是性能低于系统原生UIVisualEffectView,不适合频繁刷新的场景。

内容的提问来源于stack exchange,提问作者user15415235

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:36:07