Размытие UILabel в Swift

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

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

Не могли бы вы сообщить мне, как я могу этого добиться?

Спасибо,


person nirav    schedule 08.08.2018    source источник
comment
Установите альфа-значение вашей метки, например yourLabelName.alpha = 0,5 (сумма, которую вы хотите сделать синей) метка   -  person Iraniya Naynesh    schedule 08.08.2018
comment
@IraniyaNaynesh, это не размоет метку, она просто исчезнет: P   -  person J. Doe    schedule 08.08.2018
comment
В этом случае метка не имеет какой-либо функции размытия, поэтому либо создайте CATextlayer, либо создайте подкласс метки и обновите метод рисования.   -  person Iraniya Naynesh    schedule 08.08.2018
comment
Эй, нирав, эта ссылка может быть полезна: stackoverflow .com/questions/30303090/how-to-blur-uilabel-text/   -  person Let's_Create    schedule 08.08.2018
comment
github.com/mkoehnke/AnimatedBlurLabel может оказаться полезным...   -  person Ahmad F    schedule 08.08.2018
comment
@AhmadF, он не работает с tableViewCell   -  person nirav    schedule 08.08.2018
comment
@nirav Пожалуйста, взгляните на этот ответ, который я предоставил с пользовательским UILabel, который может добиться эффекта размытия: stackoverflow.com/a/62224908/ 3564632   -  person denis_lor    schedule 06.06.2020


Ответы (2)


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

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

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

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

person rommex    schedule 08.08.2018

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

person mag_zbc    schedule 08.08.2018
comment
У меня есть UILabel, я не могу использовать CATextLayer в качестве автоматического изменения размера ячейки - person nirav; 08.08.2018