Размытие фона больше не работает в iOS14

#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.