我有一个在子视图中显示视频的应用程序,如果可以选择在第二个屏幕(例如 Apple TV)上显示该视频并能够使用该释放的空间来显示其他控件,那将是很好的选择。
我已经找到了有关如何做到这一点的各种帮助,但我什至在走出起跑门之前就碰壁了。
为了检测应用程序是否已在多显示环境中启动,所有示例代码都具有类似...
if (UIScreen.Screens.Length > 1) {
// ...
}
(我在 C#/Xamarin 中执行此操作,但我怀疑问题是否与此有关;无论如何,这些片段都在 C# 中)
我的问题是,无论我做什么,屏幕数组始终为 1。iPad 运行的是 iOS 11.2.5,如果我打开镜像,iPad 就会被镜像,但是,同样,屏幕阵列只有一个项目。
还有一些观察者可以检测应用程序运行时添加/删除的屏幕。我还没有看到 Xamarin 特定的代码,但我认为它看起来像:
NSNotificationCenter.DefaultCenter.AddObserver(this, UIScreen.DidConnectNotification, NSKeyValueObservingOptions.New, IntPtr.Zero);
NSNotificationCenter.DefaultCenter.AddObserver(this, UIScreen.DidDisconnectNotification, NSKeyValueObservingOptions.New, IntPtr.Zero);
无论如何,即使我添加/删除 Apple TV 或在 iPad 上进入/退出镜像模式,它们也不会触发。
哦; 如果我这样做
avPlayer.AllowsExternalPlayback = true;
avPlayer.UsesExternalPlaybackWhileExternalScreenIsActive = true;
那么这也可以按预期工作。视频现在在 Apple TV 上全屏显示,iPad 上包含 avPlayer 的 UIView 变灰而不是显示视频。
然而,这不是我要找的。我想控制两个屏幕的布局,但两者都没有。(虽然我确实希望视频在 Apple TV 上全屏显示,但我不希望它成为 AVPlayerViewController,并且我确实想重新调整 iPad 视频视图占用的屏幕空间)
归根结底,我认为我需要的只是设法获得
当我启动应用程序时,UIScreen.Screens.Length 等于 2。
让 UIScreen 检测/报告第二个显示器的秘诀是什么?