代码之家  ›  专栏  ›  技术社区  ›  bhartsb

从弹出窗口显示自定义弹出窗口,然后取消第一个弹出窗口会导致闪烁

  •  0
  • bhartsb  · 技术社区  · 6 年前

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

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

    但是,在创建B之前取消A会导致闪烁。我想先创建B,然后再放弃A,但还没有找到一个好方法。

    如何做到这一点,避免闪烁的想法?

    let storyBoard = UIStoryboard(name: "MenuStoryboard", bundle: nil)
    let aPopup = storyBoard.instantiateViewController(withIdentifier: "Popup_A")
    
    present(aPopup, animated: false, completion: nil)
    

    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
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   ppalancica    6 年前

    不建议您这样做,视图控制器不应该关心“放弃自己”,然后“要求”另一个视图控制器提供新的视图控制器。