В настоящее время я создаю собственное всплывающее окно A, а затем при нажатии кнопки в нем закрывает его, а в обработчике завершения создает новое всплывающее окно B.
Оба всплывающих окна похожи в том, что они используют черный вид с альфа-каналом.установите значение для имитации эффекта серого экрана, который обеспечивает стандартное оповещение.
Однако отклонение A перед созданием B вызывает мерцание.Я хотел бы создать B, прежде чем уволить A, но не нашел хорошего способа сделать это.
Идеи о том, как это сделать и избежать мерцания?
Я думаю поставитьчерный вид с установленным альфа на экране контроллера вида, который показывает всплывающее окно A и включает его, когда отображается всплывающее окно A, и выключается, когда всплывающее окно B закрывается.Однако это не кажется лучшим решением.Другим способом было бы иметь одно всплывающее окно и показывать скрытые элементы управления, но это тоже не очень хорошее решение, потому что это делает грязный VC беспорядочным.
Вот как теперь выглядит код:
Изменю создается всплывающее окно A:
let storyBoard = UIStoryboard(name: "MenuStoryboard", bundle: nil)
let aPopup = storyBoard.instantiateViewController(withIdentifier: "Popup_A")
present(aPopup, animated: false, completion: nil)
Затем из действия кнопки всплывающего окна A:
self.dismiss(animated: false) {
let storyBoard = UIStoryboard(name: "MenuStoryboard", bundle: nil)
let bPopup = storyBoard.instantiateViewController(withIdentifier: "PopUp_B")
if let topViewController = UIApplication.shared.topMostViewController {
topViewController.present(bPopup, animated: false, completion: nil)
}
}
и расширения:
extension UIViewController {
var topMostViewController : UIViewController {
if let presented = self.presentedViewController {
return presented.topMostViewController
}
if let navigation = self as? UINavigationController {
return navigation.visibleViewController?.topMostViewController ?? navigation
}
if let tab = self as? UITabBarController {
return tab.selectedViewController?.topMostViewController ?? tab
}
return self
}
}
extension UIApplication {
var topMostViewController : UIViewController? {
return self.keyWindow?.rootViewController?.topMostViewController
}
}