У меня в приложении несколько вкладок (UITabBarController
), и в одной из них я могу показать модальный UIViewController с эффектом размытия (поверх текущего контроллера из вкладки).
let bVC = BlurViewController()
bVC.modalPresentationStyle = .overCurrentContext
self.present(bVC, animated: true, completion: nil)
Размытый контроллер — это просто UIViewController
с этим кодом в viewDidLoad
:
let blurEffect = UIBlurEffect(style: .extraLight)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = self.view.frame
self.view.insertSubview(blurEffectView, at: 0)
Первая проблема у меня здесь, другие вкладки все еще доступны. Пользователь может нажимать на них, не закрывая мой размытый контроллер.
Это не настоящая проблема, но когда этот пользователь возвращается, мой размытый контроллер просмотра имеет серый фон. Оно и понятно, все области за ним не перерисовывались, но это беда.
Третья проблема: если этот пользователь попытается закрыть мой размытый контроллер, первый контроллер будет просто черным.
Я знаю, что могу бороться с двумя последними проблемами с помощью этого:
убрать размытый контроллер в
viewDidDisappear
.помните «размытое состояние» в его родительском контроллере.
если пользователь вернулся, снова показать размытый контроллер.
Но, может быть, есть более элегантный и простой подход?