保持一个UIView或UIViewController在所有其他之上

我正在inheritanceUIApplication来拦截并显示我的TouchDisplay视图中的触摸。 我想扩展应用程序,窗口,委托或主视图控制器,以保持我的TouchDisplay视图在所有其他视图之上。 随着我和其他大多数应用程序的工作,视图和控制器一直添加和删除。 我认为正确的答案将能够处理这些添加和删除,并保持TouchDisplay视图顶部。

乔,谢谢你的帮助

以下是您可以采取的一些方法:

  1. 如果您针对iOS 5+和iPad ,则可以创build一个包含两个视图控制器的顶级视图控制器。 第一个是你的“TouchDisplay”视图的视图控制器。 第二个是应用程序的普通的根视图控制器。 (即你现有的主视图控制器;你需要在这个视图控制器上设置definePresentationContext为YES)因为你正在编写容器视图控制器,所以你可以订购这两个子视图。 有一个关于视图控制器遏制的WWDC 2011 Talk,详细介绍了这一点。 这是最正确的方法恕我直言,因为它给你一个视图控制器为你的TouchDisplay视图,处理旋转和一般与其他人很好。 (这只适用于iPad,因为在iPhone上,新的模式视图总是覆盖整个屏幕。)

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

  3. 最极端的方法是你可以创build另一个UIWindow,并给它一个更高的窗口级别,比如UIWindowLevelAlert并把你的TouchDisplay视图放在那里。 然后,您可以使窗口背景透明,并且会保持在正常的应用程序内容之上。 这里有很多的问题,特别是关于自动旋转和哪个窗口是keyWindow(这就是为什么你应该使用#1或#2,如果可以的话)。

一段时间后,我能够让我的应用程序工作。 我已经做了一个简单的覆盖,显示您的现有应用程序的触摸反馈。

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

示例图像

快乐的编码,乔