gpt4 book ai didi

ios - 如何在 Swift 中添加半径为 2pt 的模糊?

转载 作者:行者123 更新时间:2023-11-28 10:18:08 25 4
gpt4 key购买 nike

我想创建这样的东西:

enter image description here

我试过这个:

var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
var blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
view.addSubview(blurEffectView)

但这会产生非常暗的模糊。但我需要半径为 2pt 的深色模糊(黑色)。

我可以在 Swift 中实现吗?

最佳答案

您无法控制 UIVisualEffectView 的模糊半径。您可以通过拍摄要模糊的 View 并将 CoreImage 的“CIGaussianBlur”过滤器应用于该快照然后在直接放置在要模糊的 View 上方的 UIImageView 中显示模糊图像来实现您想要的效果。使用 CIGaussianBlur,您可以将模糊半径应用到任意长度。

您可以在 UIView 上使用扩展来使这更方便:

extension UIView
{
func snapshotView(scale scale: CGFloat = 0.0, isOpaque: Bool = true) -> UIImage
{
UIGraphicsBeginImageContextWithOptions(self.bounds.size, opaque, scale)
self.drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

return image
}

func blur(blurRadius blurRadius: CGFloat) -> UIImage?
{
guard let blur = CIFilter(name: "CIGaussianBlur") else { return nil }

let image = self.snapshotView(scale: 1.0, isOpaque: true)
blur.setValue(CIImage(image: image), forKey: kCIInputImageKey)
blur.setValue(blurRadius, forKey: kCIInputRadiusKey)

let ciContext = CIContext(options: nil)

let result = blur.valueForKey(kCIOutputImageKey) as! CIImage!

let boundingRect = CGRect(x: 0,
y: 0,
width: frame.width,
height: frame.height)

let cgImage = ciContext.createCGImage(result, fromRect: boundingRect)

return UIImage(CGImage: cgImage)
}
}

然后你可以添加一个半透明的覆盖层来确定模糊有多暗,例如:

let overlay = UIView()
overlay.frame = view.bounds
overlay.backgroundColor = UIColor(white: 0.0, alpha: 0.30)
viewIWantToBlur.addSubview(overlay)
let image = viewIWantToBlur.blur(blurRadius: 2.0)
imageView.image = image

有关此方法的更多信息和更强大的工作示例,您可以参见 here.您应该意识到这是性能密集型的。

关于ios - 如何在 Swift 中添加半径为 2pt 的模糊?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38935214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com