gpt4 book ai didi

ios - 从弹出窗口呈现自定义弹出窗口然后关闭第一个弹出窗口会导致闪烁

转载 作者:行者123 更新时间:2023-11-30 10:58:10 26 4
gpt4 key购买 nike

目前,我创建了一个自定义弹出窗口 A,然后当按下其中的按钮时将其关闭,并在完成处理程序中创建一个新的弹出窗口 B。

两个弹出窗口的相似之处在于它们都使用黑色 View ,并将 alpha 设置为一个值来模拟标准警报提供的灰色屏幕效果。

但是在创建 B 之前解雇 A 会导致闪烁。我想在解雇 A 之前创建 B,但还没有找到一个好的方法来做到这一点。

关于如何做到这一点并避免闪烁的想法?

我正在考虑将带有 alpha 设置的黑色 View 放在显示弹出窗口 A 的 View Controller 屏幕中,并在显示弹出窗口 A 时将其打开,在弹出窗口 B 关闭时将其关闭。然而,这似乎不是最好的解决方案。另一种方法是使用单个弹出窗口并显示隐藏控件,但这似乎也不是一个好的解决方案,因为它会使 Storyboard 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
}
}

最佳答案

不建议您这样做, View Controller 不应该担心“自行解散”,然后“要求”另一个 View Controller 呈现新的 View Controller 。

我会使用 PopupA 的委托(delegate)来与呈现它的任何对象进行通信。该对象应该关闭 PopupA View Controller 。

完成后,您可以尝试显示PopupB。

关于ios - 从弹出窗口呈现自定义弹出窗口然后关闭第一个弹出窗口会导致闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53714632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com