所以我正在为 iPhone 创建一个游戏,我希望始终加载一个透明的视图控制器,它超越了我所有的其他视图控制器。这个透明的视图控制器会在每个视图的顶部显示诸如游戏时间、当前金钱等内容。我想这样做,以便时钟计时器的所有代码都可以保存在一个文件中,而无需复制/粘贴到我所有不同的 OtherViewController.m 文件中。我已经研究了一段时间,但我似乎无法弄清楚如何创建这个视图控制器而不阻塞它后面的控制器,或者当我转换到新视图时它不会被阻塞。欢迎任何有关如何执行此操作的建议以及可能的替代解决方案。谢谢!
3 回答
您可以将视图控制器添加为根视图控制器的子视图,并将其视图添加为子视图。您需要进行一些篡改hitTest
以确保将触摸传递给兄弟视图。
您也许可以使用继承来构建所有其他控制器使用的父视图控制器 - 如果这样做,您可能不需要覆盖整个可见区域的透明视图,但您可以添加时间/分数等项目/HUD 根据需要 - 并根据您所在的视图移动它们。使用两个完全人为的示例,在游戏的飞行部分中,您可能希望所有这些信息位于屏幕顶部仅覆盖天空,但如果您在游戏的鸭子射击部分中,信息应显示在屏幕底部,因此您不会隐藏鸭子。
我将首先尝试使用在其中绘制视图的基类视图控制器viewDidLoad:
您应该使用自定义容器控制器来执行此操作。该控制器将在顶部有一个透明视图,内容视图控制器将显示在该透明视图下方。您可以在 IB 中使用容器视图执行此操作。从常规的 UIViewController 开始,并在顶部添加一个透明的 UIView 以及您想要的任何子视图。然后,添加一个容器视图,并使其成为整个屏幕的大小。在左侧的场景列表中,您必须将容器视图向上移动,使其成为主视图的子视图列表中的第一个(这会将透明视图放在顶部)。您可以将通过容器视图获得的包含控制器嵌入导航控制器(导航栏关闭),然后从那里添加其他控制器。
我已将图像中的透明视图着色为蓝色,以便您可以看到它——容器视图在其下方向上延伸到状态栏。当您导航到不同的控制器时,它们将滑入透明视图下方,透明视图将保持静止。