如何检测另一个应用程序是否在iOS 11中作为幻灯片运行?

Rob*_*son 11 ipad ios ios11

多任务处理功能在iOS 11中得到了更新,其中一个是幻灯片,在下面的gif中进行演示.

在此输入图像描述

通过这些更改,我们再也无法使用从iOS 9检查帧大小技术来检测是否有其他应用程序在我的应用程序上"滑过".

是否有任何新方法可以检测另一个应用是否以幻灯片形式运行?

Dav*_* S. 5

我能够在 iPad Pro(它支持并排应用程序,而不仅仅是幻灯片)上相当轻松地完成这项工作。这是代码:

class ViewController: UIViewController {

    override func viewWillLayoutSubviews() {
        isThisAppFullScreen()
    }

    @discardableResult func isThisAppFullScreen() -> Bool {
        let isFullScreen = UIApplication.shared.keyWindow?.frame == UIScreen.main.bounds
        print("\(#function) - \(isFullScreen)")
        return isFullScreen
    }
}
Run Code Online (Sandbox Code Playgroud)

最终结果是,如果视图是全屏的,它将打印“true”,如果它与另一个应用程序共享屏幕,它将打印“false”,并且每次显示、隐藏或调整任何内容时都会运行。

问题是旧设备只支持侧滑。有了这些,您的应用程序就不会再调整大小了。相反,它只是放弃主动使用,而另一个应用程序正在变得活跃。

在这种情况下,您所能做的就是将逻辑放在AppDelegate要查找applicationWillResignActiveapplicationDidBecomeActive。当你滑过时,你得到applicationWillResignActive但不是applicationDidEnterBackground

您可以将这种可能性视为一种可能性,但您无法区分滑动和查看通知从屏幕顶部向下滑动。出于这个原因,这并不理想,但监控应用程序生命周期可能是您能做的最好的事情。