Ios 如何在Swift中添加半径为2pt的模糊?
我想创造这样的东西: 我试过这个:Ios 如何在Swift中添加半径为2pt的模糊?,ios,swift,uiblureffect,Ios,Swift,Uiblureffect,我想创造这样的东西: 我试过这个: var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark) var blurEffectView = UIVisualEffectView(effect: blurEffect) blurEffectView.frame = view.bounds view.addSubview(blurEffectView) 但这会造成非常暗的模糊。但我需要精确的暗模糊(黑色),半径为2pt 我可以用Swif
var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
var blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
view.addSubview(blurEffectView)
但这会造成非常暗的模糊。但我需要精确的暗模糊(黑色),半径为2pt
我可以用Swift实现吗?您无法控制
UIVisualEffectView
的模糊半径。通过对要模糊的视图进行快照,并将CoreImage的“CIGaussianBlur”过滤器应用于该快照,然后在要模糊的视图正上方的UIImageView
中显示模糊图像,可以实现所需的效果。使用CIGaussianBlur
可以对任意长度应用模糊半径
您可以使用ui视图
上的扩展名,使此操作更加方便:
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
有关此方法的更多信息和更健壮的工作示例,您可以看到,您应该意识到这是性能密集型的。您无法控制
UIVisualEffectView
的模糊半径。通过对要模糊的视图进行快照,并将CoreImage的“CIGaussianBlur”过滤器应用于该快照,然后在要模糊的视图正上方的UIImageView
中显示模糊图像,可以实现所需的效果。使用CIGaussianBlur
可以对任意长度应用模糊半径
您可以使用ui视图
上的扩展名,使此操作更加方便:
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
有关此方法的更多信息和更健壮的工作示例,您可以看到,您应该意识到这是性能密集型的。如果您使用的是故事板,这里有一个简单的解决方法。 首先,您需要从图像、UIEW或uielement正上方的故事板添加一个“带模糊的视觉效果视图”。 现在绘制视觉效果视图的出口,如下所示:-
@IBOutlet weak var blurredViewVisulaEffect: UIVisualEffectView!
并在viewDidLoad方法中添加这两行
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
blurredViewVisulaEffect.effect = blurEffect
根据我们的要求操纵视图:-
现在,如果要自定义图像的模糊度,请从故事板更改UIVisualEffectView的alpha值。将alpha的值保持在0.5到0.8之间,以获得所需的模糊度。
如果您想更改视图的阴影/颜色,如您所述,介于明暗之间,则需要将UIVisualEffectView的背景色设置为黑色,并将其不透明度从100%更改为30%(或根据需要更改为40%)
然后在viewDidLoad()中将视图的边框设置为2 px,如下所示
如果您使用的是故事板,这里有一个简单的解决方法。 首先,您需要从图像、UIEW或uielement正上方的故事板添加一个“带模糊的视觉效果视图”。 现在绘制视觉效果视图的出口,如下所示:-
@IBOutlet weak var blurredViewVisulaEffect: UIVisualEffectView!
并在viewDidLoad方法中添加这两行
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
blurredViewVisulaEffect.effect = blurEffect
根据我们的要求操纵视图:-
现在,如果您想自定义图像的模糊性,那么从故事板中更改ui visualeffectView的alpha值。将alpha的值保持在0.5到0.8之间,以获得所需的模糊度。
如果您想更改视图的阴影/颜色,如您所述,介于明暗之间,则需要将UIVisualEffectView的背景色设置为黑色,并将其不透明度从100%更改为30%(或根据需要更改为40%)
然后在viewDidLoad()中将视图的边框设置为2 px,如下所示
要为UIVisualEffectView创建半径,请尝试以下操作:
然后指定半径:
要创建UIVisualEffectView的半径,请尝试以下操作:
然后指定半径:
可以使用ios专用API更改模糊半径。我为您提供了一个解决方案: 用法:
import CustomBlurEffectView
let customBlurEffectView = CustomBlurEffectView(
radius: 20, // Set blur radius value. Defaults to `10` (CGFloat)
color: .cyan, // Set tint color value. Defaults to `nil` (UIColor?)
colorAlpha: 0.4 // Set tint color alpha value. Defaults to `0.8` (CGFloat)
)
customBlurEffectView.frame = CGRect(x: 0, y: 0, width: 300, height: 300)
addSubview(customBlurEffectView)
可以使用ios专用API更改模糊半径。我为您提供了一个解决方案: 用法:
import CustomBlurEffectView
let customBlurEffectView = CustomBlurEffectView(
radius: 20, // Set blur radius value. Defaults to `10` (CGFloat)
color: .cyan, // Set tint color value. Defaults to `nil` (UIColor?)
colorAlpha: 0.4 // Set tint color alpha value. Defaults to `0.8` (CGFloat)
)
customBlurEffectView.frame = CGRect(x: 0, y: 0, width: 300, height: 300)
addSubview(customBlurEffectView)
你喜欢什么样的风格?光线?@Joakim但这是白色模糊。我需要一个黑色的,正好显示你需要的。@DharmeshKheni我添加了截图。在.Dark blur的例子中,我得到了这个:,但我想要更浅的黑色,带有2吨RadiusiblueEffectStyle.Light?@Joakim,但这是白色blur。我需要一个黑色的,正好显示你需要的。@DharmeshKheni我添加了截图。在.Dark blur的例子中,我得到了这个:,但我想要更浅的黑色,带有2吨半径苹果非常明确地建议不要更改
UIVisualEffectView
@chicobermuda的alpha-苹果给出了这个建议,因为较小的alpha“…会导致许多效果看起来不正确或根本不显示。”请注意,他们并没有说所有的效果都有这样的alpha问题——也许这不是UIBlurEffect的问题?苹果非常明确地建议不要更改UIVisualEffectView
@chicobermuda的alpha——苹果给出了这个建议,因为较小的alpha“…会导致许多效果看起来不正确或根本不显示。”请注意,他们并没有说所有的效果都有这样的阿尔法问题-也许这不是UIBlurEffect的问题?欢迎使用stackoverflow。您正在演示如何设置“角半径”。这与当前的问题无关,即如何控制模糊效果的“半径”——即模糊扩散的(与设备无关)像素数。注意:在您的答案中,左下角附近应该是删除它的选项。既然你的答案与这个问题无关,你可以考虑删除它,以消除负面的投票。(无论如何,不要亲自投反对票——这只是为了把这个答案推到其他答案的下面,而其他答案可能是错误的。)