gpt4 book ai didi

ios - 将 UIView 或 UIViewController 置于所有其他之上

转载 作者:可可西里 更新时间:2023-11-01 05:23:11 25 4
gpt4 key购买 nike

我正在对 UIApplication 进行子类化,以在我的 TouchDisplay View 中拦截和显示触摸。我想扩展 Application、Window、Delegate 或 Main ViewController,以便让我的 TouchDisplay View 位于所有其他 View 之上。当我和大多数其他应用程序工作时, View 和 Controller 一直在添加和删除。我认为正确的答案将能够处理这些添加和删除,并且仍然将 TouchDisplay View 保持在顶部。

感谢您的帮助,乔

最佳答案

您可以采用以下几种方法:

  1. 如果您只针对 iOS 5+ 和 iPad,您可以创建一个包含两个 View Controller 的顶级 View Controller 。第一个是“TouchDisplay” View 的 View Controller 。第二个是应用程序的普通 Root View Controller 。 (即您现有的主视图 Controller ;您需要在此 View Controller 上将 definesPresentationContext 设置为 YES)由于您正在编写容器 View Controller ,因此您可以根据需要对这两个 subview 进行排序。有一个WWDC 2011 Talk on view controller containment详细介绍了这一点。这是最“正确”的方法恕我直言,因为它为您的 TouchDisplay View 提供了一个 View Controller ,处理旋转并且通常与其他人一起玩得很好。 (这只适用于 iPad,因为在 iPhone 上新的模态视图总是覆盖整个屏幕。)

  2. 一种更直接的方法是使用 addSubview: 将您的 TouchView 作为 subview 简单地添加到您现有的顶级 UIWindow。大多数应用程序实际上并没有删除顶级 View Controller 或添加新的顶级 View Controller ;他们只是从中呈现其他 View Controller 。您在顶层窗口中添加的 View 将保留在这些 View 之上。当然,您的应用可能不遵循此规则,在这种情况下,您可以尝试选项 #3。这有旋转陷阱(设备旋转时您的 View 不会自动旋转,因此您需要自己执行此操作。)如果遇到问题,您也可以强制 View 回到顶部,例如,在 1 秒计时器上用其他东西覆盖它。这也不如选项 #1 好,因为您没有获得 UIViewController,只有 UIView。

  3. 最极端的方法是您可以创建另一个 UIWindow 并为其提供更高的窗口级别,例如 UIWindowLevelAlert 并将您的 TouchDisplay View 放在其中。然后您可以使窗口背景透明,它会保持在您的正常应用程序内容之上。这里有很多陷阱,尤其是关于自动旋转和哪个窗口是 keyWindow(这就是为什么你应该尽可能使用 #1 或 #2)。

关于ios - 将 UIView 或 UIViewController 置于所有其他之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com