Как получить эффект размытия, похожий на строку состояния карты Apple? - PullRequest
0 голосов
/ 31 августа 2018

Я работаю над приложением iOS 11 на основе карт и хочу, чтобы строка состояния была размыта в точности так, как это выглядит на картах Apple.

Вот как это выглядит в приложении Карты: enter image description here

В настоящее время я использую UIVisualEffectView для репликации этого эффекта. Вот мой код:

let blurEffect = UIBlurEffect(style: .regular)
blurredStatusBar = UIVisualEffectView(effect: blurEffect)
blurredStatusBar?.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(blurredStatusBar!)

Однако, какой бы UIBlurEffect я не использовал, я не могу воспроизвести эффект, как приложение «Карты». Вот как это выглядит для различных эффектов:

.regular enter image description here

.prominent enter image description here

.light enter image description here

.extraLight enter image description here

Я просто хочу размыть строку состояния, не добавляя насыщенности, вибрации или какого-либо оттенка белого цвета.

Существует свойство экземпляра - backgroundFilters , которое, возможно, могло бы помочь мне, но, к сожалению, оно недоступно для слоев на iOS.

Одно из возможных решений, предложенных здесь , - захват содержимого UIView внутри изображения, затем размытие и отображение. Однако в моем случае это нереальное решение, потому что под строкой состояния есть карта, которую можно панорамировать. Нет смысла непрерывно захватывать нижнюю карту как изображение и размыть ее во время панорамирования карты.

Я пытался использовать ILTranslucentView , который является небольшим подклассом UIView, который обеспечивает естественный эффект размытия (полупрозрачный) для iOS 7+. Вот как это выглядело:

enter image description here

Я пробовал несколько разных подходов, таких как this , но безрезультатно.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Я нашел решение для вышеуказанной проблемы. Я использовал VisualEffectView для достижения эффекта. Это позволяет вам настроить свойства, такие как colortint, blurRadius, масштаб размытия вашего VisualEffectView. Тем не менее, это следует использовать с осторожностью. Это использует частный UIKit API, чтобы сделать свое волшебство; отправка этого кода в App Store повышает риск отклонения!

0 голосов
/ 31 августа 2018

Вы можете попробовать следующее.

yourView.backgroundColor = UIColor.clear
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)   // Or   UIBlurEffectStyle.dark    
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = viewAdvancefilter.blurredView.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
yourView.addSubview(blurEffectView)
...