在Swift中模糊UILabel

时间:2018-08-08 07:32:00

标签: ios iphone swift uilabel uiblureffect

如何模糊UILabel的文本?

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

您能告诉我如何实现这一目标吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用CATextLayer而不是UILabel来使文本模糊而无背景。 CALayer具有contentsScale属性,如果将其设置为小于屏幕比例的值,则会实现模糊效果

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,但为了清晰呈现文本,必须为其指定UIScreen.main.scale的值,对于大多数iPhone而言,该值为2.0,其中值得注意的例子是iPhone X,其值为3.0。值越低,文本越模糊。

答案 1 :(得分:0)

因为这是一个有趣的问题,所以我查阅了UILabel文档。似乎没有一种方法仅负责文本绘制,可以将其覆盖。

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

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

所有这些的明显缺点是,此自定义子类将错过UILabel的所有属性,包括属性文本和多行分割。