Добавить гауссово размытие на слой backgroundColor? - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь добавить размытие по Гауссу к слою, который использует backgroundColor.

Приведенный ниже код добавляет рамку вокруг текста заголовка и отлично работает, я просто хочу, чтобы белый был размытым.

title.layer.borderColor = UIColor.white.cgColor
title.layer.backgroundColor = UIColor.white.cgColor
title.layer.borderWidth = 4
title.layer.cornerRadius = 5

Возможно ли это без использования imageView?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018
let layer = CALayer()
if let filter = CIFilter(name:"CIGaussianBlur") {
filter.name = "myFilter"
layer.backgroundFilters = [filter]
layer.setValue(1, forKeyPath: "backgroundFilters.myFilter.inputRadius")
}

https://developer.apple.com/documentation/quartzcore/calayer/1410827-backgroundfilters

0 голосов
/ 08 ноября 2018

Если вы пишете код для Mac OS, то приведенное ниже решение Влада подойдет вам просто и элегантно. Mac OS CALayers позволяют добавлять массив фильтров Core Image, которые применяются к содержимому «вживую». iOS нет. Поскольку вы упоминаете UIColor в своем вопросе, я предполагаю, что ваш вопрос касается iOS.

В iOS Скорее всего, потребуется значительное количество ручного кодирования с использованием фильтров Core Image, чтобы сделать это со слоями. (Вам нужно было бы написать код для захвата содержимого вида, который вы хотите размыть, преобразовать его в CIImage, передать его в Core Image для размытия, а затем отобразить полученный CIImage обратно в CGImage и установите его в свой слой.)

Однако, если вы добавите UIVisualEffectView к вашему виду, это позволит вам размыть содержимое вида, который находится внизу. A UIVisualEffectView ОЧЕНЬ прост в использовании. В Интернете есть несколько учебных пособий, которые покажут вам, как их использовать. Вот что я бы предложил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...