感谢您的帮助, Joe
如果你的目标是 iOS 5+ 和仅限iPad,你可以创建一个顶级视图控制器,其中包含两个子视图控制器。第一个子视图控制器是 "TouchDisplay" 视图的控制器。第二个子视图控制器是应用程序的正常根视图控制器。(即你现有的主视图控制器;你需要在这个视图控制器上设置 definesPresentationContext 为 YES) 因为你正在编写容器视图控制器,所以可以按照自己的喜好排序这两个子视图。有一篇WWDC 2011 Talk on view controller containment详细介绍了这一点。这是最 "正确" 的方法,因为它为你的 TouchDisplay 视图提供了一个视图控制器,处理旋转并与其他视图控制器和谐相处。(这只适用于iPad,因为在iPhone上,新的模态视图总是覆盖整个屏幕。)
更简单的方法是将 TouchView 添加到现有的顶级 UIWindow 中作为子视图,使用 addSubview:
方法。大多数应用程序实际上不会删除顶级视图控制器或添加新的顶级视图控制器;它们只是从中呈现其他视图控制器。在顶级窗口中添加的视图将保持在其上方。当然,你的应用程序可能不遵循此规则,在这种情况下,你可以尝试使用选项 #3。这种方法有旋转的问题 (当设备旋转时,你的视图不会自动旋转,所以需要手动处理)。如果其他东西覆盖了它,你还可以通过 1 秒计时器强制将视图置于顶部。这也不如选项 #1 好,因为你只得到一个 UIView,而不是 UIViewController。
最极端的方法是创建另一个 UIWindow,并给它更高的窗口级别,例如 UIWindowLevelAlert
,然后将你的 TouchDisplay 视图放在其中。然后可以将窗口背景设置为透明,它将保持在正常应用程序内容的上方。这里有很多注意事项,特别是关于自动旋转和哪个窗口是 keyWindow (这就是为什么如果可以,应该使用 #1 或 #2 而不是 #3 的原因)。
经过一段时间的努力,我终于让我的应用程序正常运行了。我制作了一个易于使用的覆盖层,在您现有的应用程序上显示触摸反馈。
您可以在此处下载该项目: https://github.com/megaplow/FingerTracks/tree/master/FingerTracks
祝编码愉快, Joe
[self.view insertSubview:view below/aboveView:anotherView];
这样的方法。 - Snowman