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

时间:2017-09-27 08:17:02

标签: ios ipad ios11

多任务功能在iOS 11中得到了更新,其中一个是slide over,在下面的gif中进行了演示。

enter image description here

通过这些更改,我们再也无法使用techniques that check frame size from iOS 9来检测其他应用是否是"滑过"在我的应用程序。

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

1 个答案:

答案 0 :(得分:3)

我能够在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
    }
}

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

我制作了一个简单的视频,显示了结果:

https://www.dropbox.com/s/g8pqboj9jjhnlca/FullScreenOrNotTest.mov?dl=0

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

在这种情况下,您所能做的只是在AppDelegate中添加逻辑以查找applicationWillResignActiveapplicationDidBecomeActive。当您滑过时,您会获得applicationWillResignActive但不会applicationDidEnterBackground

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