Cocoa touch 我如何知道我的视图位于最前面/被覆盖?

Cocoa touch 我如何知道我的视图位于最前面/被覆盖?,cocoa-touch,uiviewcontroller,Cocoa Touch,Uiviewcontroller,我有一个具有某种内部处理的视图控制器,它只应该在视图控制器的视图位于最前面时运行。过去有一个方便的约定,即可以在viewdideappease(:)中启动这种处理,然后在viewdillesmove(:)中停止它 但是现在,视图也可以被另一个半透明视图控制器覆盖,在这种情况下,它仍然在屏幕上(viewwilldiscover(:)不被调用),但同时它不是最前面的 有没有一种简单、防弹的方法可以知道这种情况何时发生?换句话说,我希望像viewWillResignActive和viewWillBec

我有一个具有某种内部处理的视图控制器,它只应该在视图控制器的视图位于最前面时运行。过去有一个方便的约定,即可以在
viewdideappease(:)
中启动这种处理,然后在
viewdillesmove(:)
中停止它

但是现在,视图也可以被另一个半透明视图控制器覆盖,在这种情况下,它仍然在屏幕上(
viewwilldiscover(:)
不被调用),但同时它不是最前面的


有没有一种简单、防弹的方法可以知道这种情况何时发生?换句话说,我希望像
viewWillResignActive
viewWillBecomeActive这样的东西。无需重写presentViewController(uux0:animated:completion:)
之类的东西。

最后,我使用了一个自定义的
UINavigationController
子类,并捕获了演示和解聘方法:

protocol ViewActivityDelegate {

    func viewWillBecomeCovered()
    func viewDidBecomeCovered()
    func viewWillBecomeRevealed()
    func viewDidBecomeRevealed()
}

class CustomNavigationController: UINavigationController {

    override func presentViewController(viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)?) {
        let delegate = topViewController as? ViewActivityDelegate
        delegate?.viewWillBecomeCovered()
        super.presentViewController(viewControllerToPresent, animated: flag) {
            completion?()
            delegate?.viewDidBecomeCovered()
        }
    }

    override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) {
        let delegate = topViewController as? ViewActivityDelegate
        delegate?.viewWillBecomeRevealed()
        super.dismissViewControllerAnimated(flag) {
            completion?()
            delegate?.viewDidBecomeRevealed()
        }
    }
}