4

我正在继承 UIApplication 以在我的 TouchDisplay 视图中拦截和显示触摸。我想扩展 Application、Window、Delegate 或 Main ViewController,以使我的 TouchDisplay 视图位于所有其他视图之上。随着我和大多数其他应用程序的工作,视图和控制器一直在添加和删除。我认为正确的答案将能够处理这些添加和删除,并且仍然保持 TouchDisplay 视图位于顶部。

谢谢你的帮助,乔

4

2 回答 2

6

您可以为此采取以下几种方法:

  1. 如果您只针对 iOS 5+ 和 iPad,您可以制作一个包含两个视图控制器的顶级视图控制器。第一个是“TouchDisplay”视图的视图控制器。第二个是应用程序的普通根视图控制器。(即你现有的主视图控制器;你需要在这个视图控制器上将definePresentationContext设置为YES)因为你正在编写容器视图控制器,你可以随意订购这两个子视图。WWDC 2011 Talk on view controller contains对此进行了非常详细的说明。恕我直言,这是最“正确”的方法,因为它为您的 TouchDisplay 视图提供了一个视图控制器,处理旋转并且通常与其他人相处得很好。(这只适用于 iPad,因为在 iPhone 上,新的模态视图总是覆盖全屏。)

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

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

于 2013-01-10T02:03:55.200 回答
3

一段时间后,我能够让我的应用程序正常工作。我制作了一个易于使用的叠加层,可以显示现有应用程序的触摸反馈。

你可以在这里下载项目: https ://github.com/megaplow/FingerTracks/tree/master/FingerTracks

示例图像

快乐的编码,乔

于 2013-02-08T00:04:30.917 回答