如何在iOS 11中检测另一个应用程序是否作为滑动窗口运行?

13

iOS 11对多任务处理功能进行了更新,其中之一是滑动悬浮窗口,如下gif演示。

enter image description here

随着这些变化,不再可能使用从iOS 9开始检查帧大小的技术来检测另一个应用程序是否在我的应用程序上方作为“滑动浮窗”。

是否有任何新方法可以检测另一个应用程序是否作为滑动浮窗运行?


8
有人对这个问题进行了负面评价并投票将其关闭,理由是“过于宽泛”——我不明白如果不提出答案,您如何能够得到更详细的信息。如果您需要更多关于这个问题的信息,请进行评论而非投票关闭。请注意,我的翻译尽可能准确地传达原意,同时保持简洁易懂。 - Robin Andersson
一个更新是,我花了很多时间尝试找到解决这个问题的方法 - 但据我所知,没有公共方法可以检查另一个应用程序是否在滑动视图中运行。 - Robin Andersson
文档中指出,当用户添加一个滑动应用时,将调用applicationWillResignActive。也许你可以从这里找到的信息构建自己的解决方案:https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/QuickStartForSlideOverAndSplitView.html#//apple_ref/doc/uid/TP40015145-CH13-SW1 - Maurice
1个回答

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
    }
}

最终结果是,如果视图是全屏,它将打印“true”,如果它与另一个应用程序共享屏幕,则打印“false”。每次显示、隐藏或调整大小时都会运行此操作。
然而,问题在于旧设备只支持滑动。对于这些设备,您的应用程序不再被调整大小。相反,它只是放弃了活动使用权,其他应用程序变得活跃。
在这种情况下,您只能在AppDelegate中放置逻辑以查找applicationWillResignActive和applicationDidBecomeActive。当您滑动时,您会得到applicationWillResignActive但不会得到applicationDidEnterBackground。
您可以将其视为可能性,但无法区分从屏幕顶部向下滑动查看通知和滑动的slide-over之间的区别。由于这个原因,这并不理想,但监控应用程序生命周期可能是最好的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接