在 Swift 中模糊 UILabel

Blur UILabel in Swift

提问人:nirav 提问时间:8/8/2018 更新时间:6/6/2020 访问量:4412

问:

如何模糊UILabel的文本?

UIBlurEffectView 不是模糊文本,而是模糊整个背景。

你能告诉我我怎样才能做到这一点吗?

谢谢

iOS iPhone Swift UILABEL UIFuluEffect

评论

0赞 Iraniya Naynesh 8/8/2018
设置标签的 alpha 值,例如 yourLabelName.alpha = 0.5(您想要蓝色的量)标签
0赞 J. Doe 8/8/2018
@IraniyaNaynesh这不会模糊标签,它只会淡出:P
0赞 Iraniya Naynesh 8/8/2018
在这种情况下,标签没有任何类型的“模糊功能”,因此请创建 CATextlayer 或对标签进行子类化并更新 draw 方法
0赞 Let's_Create 8/8/2018
嘿 nirav 这个链接可能很有用:stackoverflow.com/questions/30303090/how-to-blur-uilabel-text/......
0赞 Ahmad F 8/8/2018
github.com/mkoehnke/AnimatedBlurLabel 可能有用...

答:

-1赞 mag_zbc 8/8/2018 #1

您可以通过使用 而不是 来实现仅模糊文本,而不使用背景。 有一个属性,如果将其设置为低于屏幕比例的值,则将实现模糊效果CATextLayerUILabelCALayercontentsScale

let view = UIView()
let textLayer = CATextLayer()
textLayer.string = "yourText"
textLayer.contentsScale = 0.5 // lower number means more blurry text
view.layer.addSublayer(textLayer)

contentsScale默认值为 1.0,但要清晰呈现文本,必须为其赋值 ,对于大多数 iPhone 来说,该值为 2.0,iPhone X 是值得注意的例子,其值为 3.0。该值越低,模糊的文本就越多。UIScreen.main.scale

评论

0赞 nirav 8/8/2018
我有UILabel,我不能使用CATextLayer作为自动调整单元格大小
0赞 rommex 8/8/2018 #2

由于这是一个有趣的问题,我在 UILabel 文档中查找了。似乎没有一种方法只负责文本绘制,可以被覆盖。

所以我解决你的问题的方法是这样的:

  1. 使用单独的背景和文本绘制方法对 UIView 进行子类化。
  2. 在文本绘制方法中,将文本绘制到屏幕外图像。
  3. 然后将模糊滤镜(核心图像框架)应用于该图像。
  4. 在背景上绘制模糊的图像(可能您的子类可能有 2 个 UIView:一个用于背面,另一个用于文本)。

所有这一切的明显缺点是,这个自定义子类会错过 UILabel 的属性文本和多行划分的所有功能。