Blur UILabel в Swift
Как я могу размыть текст UILabel?
UIBlurEffectView - это не размытие текста, а весь фон.
Можете ли вы дать мне знать, как мне этого добиться?
Спасибо,
2 ответа
Поскольку это был интересный вопрос, я посмотрел в документации UILabel. Кажется, не существует метода, отвечающего только за отрисовку текста, который можно было бы переопределить.
Таким образом, мой способ решения вашей проблемы заключается в следующем:
- Подкласс UIView с отдельными методами рисования для фона и текста.
- В методе рисования текста нарисуйте текст за пределами экрана.
- Затем примените к этому изображению фильтр размытия (Core Image framework).
- Нарисуйте размытое изображение поверх фона (возможно, ваш подкласс может иметь 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. Чем ниже значение, тем больше текста будет размыто.