Blur UILabel в Swift

Как я могу размыть текст UILabel?

UIBlurEffectView - это не размытие текста, а весь фон.

Можете ли вы дать мне знать, как мне этого добиться?

Спасибо,

2 ответа

Поскольку это был интересный вопрос, я посмотрел в документации UILabel. Кажется, не существует метода, отвечающего только за отрисовку текста, который можно было бы переопределить.

Таким образом, мой способ решения вашей проблемы заключается в следующем:

  1. Подкласс UIView с отдельными методами рисования для фона и текста.
  2. В методе рисования текста нарисуйте текст за пределами экрана.
  3. Затем примените к этому изображению фильтр размытия (Core Image framework).
  4. Нарисуйте размытое изображение поверх фона (возможно, ваш подкласс может иметь 2 вида UIView: один для спины и другой для текста).

Очевидный недостаток всего этого заключается в том, что этот пользовательский подкласс будет пропускать все функции атрибутивного текста и многострочного разделения UILabel.

Вы можете добиться размытия только текста без фона, используя 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, что составляет 2,0 для большинства iPhone, при этом iPhone X является ярким примером значения 3,0. Чем ниже значение, тем больше текста будет размыто.

Другие вопросы по тегам