这是从我的导航栏垂下来的“窗帘”。
我怎样才能让这个视图覆盖在我的应用程序中的所有视图上?我必须能够将图像添加到此叠加层的子视图中
只需将它添加到您的应用程序的关键窗口。这将覆盖一切。
[[[UIApplication sharedApplication] keyWindow] addSubview:curtainView];
我使用此方法呈现全屏进度指示器覆盖(实际上是单例)以在某些活动期间阻止 UI,而不管上下文如何。
请注意,UIWindow 没有界面方向,它始终与设备对齐,因此如果采用这种方式,您必须处理旋转 UI(这实际上表明这不是最佳设计)。
我认为获得所需效果的最佳方法是创建自己的自定义容器视图控制器。这将允许您将其他视图控制器作为自定义视图控制器的子级托管,因此您可以拥有一个始终在屏幕上的“幕布”,即使它下面的内容发生变化。
与其他解决方案相比,自定义视图控制器的一些优点是:
您可以通过以下步骤实现所需 -
1.)UINavigationController
为例如创建扩展名。UINavigationControllerWithCurtain
.
2.)initWithCoder
如果您正在使用 xib 构建导航,则覆盖,并在构造函数initWithRootController
中添加窗帘的自定义视图,navigationcontroller's
即视图self.view
本身。
3.)您需要覆盖pushViewController
方法才能在最顶层设置自定义窗帘视图,因此添加以下内容 -
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[super viewController:viewController animated:animated];
[self.view bringSubviewToFront:customCurtainView];
}
UIView
(我们称之为curtainView
)。init
您打算为您的视图使用什么方法(initWithCoder:
如果它们是从 XIB 或 StoryBoard 加载的),请放置用于创建“幕”子视图的代码。curtainView
类中,添加一个用于引用窗帘子视图的属性。UIView
s(不是UIViewController
s)子类curtainView
.