多任务处理功能在iOS 11中得到了更新,其中一个是幻灯片,在下面的gif中进行了演示.
通过这些更改,我们再也无法使用从iOS 9检查帧大小的技术来检测是否有其他应用程序在我的应用程序上"滑过".
是否有任何新方法可以检测另一个应用是否以幻灯片形式运行?
我能够在 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要查找applicationWillResignActive和applicationDidBecomeActive。当你滑过时,你得到applicationWillResignActive但不是applicationDidEnterBackground。
您可以将这种可能性视为一种可能性,但您无法区分滑动和查看通知从屏幕顶部向下滑动。出于这个原因,这并不理想,但监控应用程序生命周期可能是您能做的最好的事情。