如何检测另一个应用是否在iOS 11中滑动运行?

如何检测另一个应用是否在iOS 11中滑动运行?

问题描述:

多任务功能在iOS 11中得到了更新,其中之一是slide over,它在下面的gif中演示。如何检测另一个应用是否在iOS 11中滑动运行?

enter image description here

有了这些变化是不再可能使用techniques that check frame size from iOS 9检测是否有其他的应用程序是一个在我的应用程序“滑过”。

是否有任何新的方法来检测另一个应用程序是否正在滑动运行?

+5

有人倒投了票,并投了这个问题被关闭为“太广泛” - 我不明白你如何得到更详细的,而不提出一个问题的答案。如果您觉得您需要更多关于该问题的信息,请评论而不是投票结束。 –

+0

一个更新是我花了很多时间试图找到解决这个问题的东西 - 但是没有公开的方法来检查另一个应用程序是否像幻灯片一样运行,据我所知。 –

+0

它在文档中声明,applicationWillResignActive将在用户通过应用程序添加幻灯片时调用。也许你可以从这里找到的信息构建自己的解决方案:https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/QuickStartForSlideOverAndSplitView.html#//apple_ref/doc/uid/TP40015145-CH13 -SW1 – Maurice

我可以在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 
    } 
} 

最终的结果是,它会打印出“真正的”,如果认为是全屏幕和“假”,如果它与其他应用程序共享屏幕,这是每次运行任何显示,隐藏或调整大小。

我做了一个简单的视频显示的结果,在这里:

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

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

在这种情况下,您只需将AppDelegate中的逻辑设置为applicationWillResignActiveapplicationDidBecomeActive即可。当你滑动时,你得到applicationWillResignActive,但不是applicationDidEnterBackground

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