大佬教程收集整理的这篇文章主要介绍了ios – 如何制作精确的模糊效果,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想Blur实际上像第一个Image.
我的模糊@L_675_3@就像
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark) blurEffectView = UIVisualEffectView(effect: blurEffect) blurEffectView.layer.opacity = 0.8 blurEffectView.alpha = 0.6 blurEffectView.frame = CGRectMake(0,42,UIScreen.mainScreen().bounds.width,UIScreen.mainScreen().bounds.height - 42) sourceView.addSubview(blurEffectView)
sourceview是我的背景视图.我想让它变得模糊.有什么建议吗?
extension UIImageView{ func makeBlurImage(imageView:UIImageView?) { let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark) let blurEffectView = UIVisualEffectView(effect: blurEffect) blurEffectView.frame = imageView!.bounds blurEffectView.autoresizingMask = [.FlexibleWidth,.FlexibleHeight] // to support device rotation imageView?.addSubview(blurEffectView) } }
用法:
let imageView = UIImageView(frame: CGRectMake(0,100,300,400)) let image:UIImage = UIImage(named: "photo.png")! imageView.image = image //Apply blur effect imageView.makeBlurImage(imageView) self.view.addSubview(imageView)
但是如果你想将模糊效果应用到UIView,你可以使用这个@L_675_3@:
protocol Blurable { var layer: CALayer { get } var subviews: [UIView] { get } var frame: CGRect { get } var superview: UIView? { get } func addSubview(view: UIView) func removeFromSuperview() func blur(blurRadius blurRadius: CGFloat) func unBlur() var isBlurred: Bool { get } } extension Blurable { func blur(blurRadius blurRadius: CGFloat) { if self.superview == nil { return } UIGraphicsBeginImageContextWithOptions(CGSize(width: frame.width,height: frame.height),false,1) layer.renderInContext(UIGraphicsGetCurrentContext()!) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext(); guard let blur = CIFilter(name: "CIGaussianBlur"),this = self as? UIView else { return } 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) let filteredImage = UIImage(CGImage: cgImagE) let blurOverlay = BlurOverlay() blurOverlay.frame = boundingRect blurOverlay.image = filteredImage blurOverlay.contentMode = UIViewContentMode.Left if let superview = superview as? UIStackView,index = (superview as UIStackView).arrangedSubviews.indexOf(this) { removeFromSuperview() superview.insertArrangedSubview(blurOverlay,aTindex: indeX) } else { blurOverlay.frame.origin = frame.origin UIView.transitionFromView(this,toView: blurOverlay,duration: 0.2,options: UIViewAnimationOptions.CurveEaseIn,completion: nil) } objc_setAssociatedObject(this,&BlurableKey.blurable,blurOverlay,objc_AssociationPolicy.oBJC_ASSOCIATION_RETAIN) } func unBlur() { guard let this = self as? UIView,blurOverlay = objc_getAssociatedObject(self as? UIView,&BlurableKey.blurablE) as? BlurOverlay else { return } if let superview = blurOverlay.superview as? UIStackView,index = (blurOverlay.superview as! UIStackView).arrangedSubviews.indexOf(blurOverlay) { blurOverlay.removeFromSuperview() superview.insertArrangedSubview(this,aTindex: indeX) } else { this.frame.origin = blurOverlay.frame.origin UIView.transitionFromView(blurOverlay,toView: this,nil,objc_AssociationPolicy.oBJC_ASSOCIATION_RETAIN) } var isBlurred: Bool { return objc_getAssociatedObject(self as? UIView,&BlurableKey.blurablE) is BlurOverlay } } extension UIView: Blurable { } class BlurOverlay: UIImageView { } struct BlurableKey { static var blurable = "blurable" }
Swift 4.x
extension UIView { struct BlurableKey { static var blurable = "blurable" } func blur(radius: CGFloat) { guard let superview = superview else { return } UIGraphicsBeginImageContextWithOptions(CGSize(width: frame.width,1) layer.render(in: UIGraphicsGetCurrentContext()!) guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return } UIGraphicsEndImageContext() guard let blur = CIFilter(name: "CIGaussianBlur") else { return } blur.SETVALue(CIImage(image: imagE),forKey: kCIInputImageKey) blur.SETVALue(radius,forKey: kCIInpuTradiusKey) let ciContext = CIContext(options: nil) guard let result = blur.value(forKey: kCIoUtputImageKey) as? CIImage else { return } let boundingRect = CGRect(x: 0,height: frame.height) guard let cgImage = ciContext.createCGImage(result,from: boundingRect) else { return } let filteredImage = UIImage(cgImage: cgImagE) let blurOverlay = UIImageView() blurOverlay.frame = boundingRect blurOverlay.image = filteredImage blurOverlay.contentMode = UIViewContentMode.left if let stackView = superview as? UIStackView,let index = stackView.arrangedSubviews.index(of: self) { removeFromSuperview() stackView.insertArrangedSubview(blurOverlay,at: indeX) } else { blurOverlay.frame.origin = frame.origin UIView.transition(from: self,to: blurOverlay,options: UIViewAnimationOptions.curveEaseIn,completion: nil) } objc_setAssociatedObject(self,objc_AssociationPolicy.oBJC_ASSOCIATION_RETAIN) } func unBlur() { guard let blurOverlay = objc_getAssociatedObject(self,&BlurableKey.blurablE) as? UIImageView else { return } if let stackView = blurOverlay.superview as? UIStackView,let index = stackView.arrangedSubviews.index(of: blurOverlay) { blurOverlay.removeFromSuperview() stackView.insertArrangedSubview(self,at: indeX) } else { frame.origin = blurOverlay.frame.origin UIView.transition(from: blurOverlay,to: self,objc_AssociationPolicy.oBJC_ASSOCIATION_RETAIN) } var isBlurred: Bool { return objc_getAssociatedObject(self,&BlurableKey.blurablE) is UIImageView } }
用法是例如:
segmentedControl.unBlur() segmentedControl.blur(blurRadius: 2)
这是Blurable项目的来源.
您可以在他的GitHub项目here中找到更多细节
以上是大佬教程为你收集整理的ios – 如何制作精确的模糊效果全部内容,希望文章能够帮你解决ios – 如何制作精确的模糊效果所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。