#ios #swift #xcode #ios14
#iOS #swift #xcode #ios14
Вопрос:
В настоящее время работаю над чужим существующим проектом для клиента, однако эта странная проблема возникает только на устройствах iOS14, где каждый экран с размытым фоном больше не выглядит размытым, а выглядит как прозрачное серое наложенное изображение с низким значением альфа. Я пробовал разные вещи и смотрел онлайн, но все еще не могу найти проблему здесь.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
animatedCircleView.alpha = 1
imvLogo.isHidden = false
// Hero
imvLogo.hero.id = "logo"
imvLogo.hero.modifiers = [.duration(self.animatedDuration)]
let blurEffect = (NSClassFromString("_UICustomBlurEffect") as! UIBlurEffect.Type).init()
blurEffect.setValue(8, forKeyPath: "blurRadius")
blurView = UIVisualEffectView(effect: blurEffect)
blurView.frame = UIScreen.main.bounds
blurView.alpha = 1
view.insertSubview(blurView, aboveSubview: imvBackground)
}
Вот как выглядел размытый фон раньше в iOS13:
и вот как это теперь выглядит на iOS14:
Я также попытался изменить код на этот, но он просто дает мне сплошной цвет фона вместо размытого фона:
let blurEffect = UIBlurEffect(style: .light)
blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = UIScreen.main.bounds
blurEffectView.alpha = 0
view.insertSubview(blurEffectView, aboveSubview: viewUnder)
Вот сплошной цвет фона, который он дает мне вместо этого:
Если бы кто-нибудь мог сказать мне, что может быть не так или что сломало это в iOS14, это было бы здорово, и как я мог бы это исправить. Спасибо.
Обновить:
Я проверил иерархию представлений, и на ios13 UIVisualEffectBackdropView создан правильно (см. Изображение):
Но ios14 UIVisualEffectBackdropView создан неправильно и просто берет фоновое изображение и применяет к нему оттенок, но не размывает:
Комментарии:
1.
UIVisualEffectView
альфа всегда должна быть равна 1:blurEffectView.alpha = 0
2. @aheze да, я тоже попробовал это и удалил все изменения альфа-значения в коде, но все то же самое.
3. Хм … Когда вы это сделаете
view.insertSubview(blurEffectView, aboveSubview: viewUnder)
, есть ли что-нибудь выше, что может блокировать размытие?4. Нет, ничего, я проверил иерархию представлений после просмотра фонового изображения, поверх этого он показывает UIVisualEffectView и _UIVisualEffectBackdropView. Вот и все.
5. Похоже на ошибку в iOS14, кто-нибудь еще может подтвердить?
Ответ №1:
@GameDev
На самом деле, этот код использует частный API _UICustomBlurEffect, который больше не работает с iOS 14. Вам придется вернуться к обычному подклассу UIBlurEffect, но вы не сможете установить blurRadius…
Комментарии:
1. да, я обнаружил это, однако даже при использовании обычного UIBlurEffect, как видно из исходного сообщения, он просто дает сплошной цвет вместо размытия. Единственный способ, который я нашел, чтобы исправить это, — использовать стороннюю библиотеку, которая также использует private api, но с некоторыми изменениями, которые заставляют ее работать в iOS14.