0

在此处输入图像描述

这是从我的导航栏垂下来的“窗帘”。

我怎样才能让这个视图覆盖在我的应用程序中的所有视图上?我必须能够将图像添加到此叠加层的子视图中

4

4 回答 4

1

只需将它添加到您的应用程序的关键窗口。这将覆盖一切。

[[[UIApplication sharedApplication] keyWindow] addSubview:curtainView];

我使用此方法呈现全屏进度指示器覆盖(实际上是单例)以在某些活动期间阻止 UI,而不管上下文如何。


请注意,UIWindow 没有界面方向,它始终与设备对齐,因此如果采用这种方式,您必须处理旋转 UI(这实际上表明这不是最佳设计)。

于 2013-07-02T17:38:25.800 回答
1

我认为获得所需效果的最佳方法是创建自己的自定义容器视图控制器。这将允许您将其他视图控制器作为自定义视图控制器的子级托管,因此您可以拥有一个始终在屏幕上的“幕布”,即使它下面的内容发生变化。

与其他解决方案相比,自定义视图控制器的一些优点是:

  • 干净的设计:应用程序中的其他视图或视图控制器都不需要担心窗帘
  • 单实例:在视图控制器转换期间窗帘将保持原位
  • DRY:似乎很符合“不要重复自己”的概念
于 2013-07-02T17:48:23.560 回答
0

您可以通过以下步骤实现所需 -

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];
}
于 2013-06-18T09:56:31.720 回答
-2
  1. 创建一个自定义UIView(我们称之为curtainView)。
  2. 无论init您打算为您的视图使用什么方法(initWithCoder:如果它们是从 XIB 或 StoryBoard 加载的),请放置用于创建“幕”子视图的代码。
  3. 在这个自定义curtainView类中,添加一个用于引用窗帘子视图的属性。
  4. 使您的所有UIViews(不是UIViewControllers)子类curtainView.
  5. 瞧!
于 2013-06-18T10:17:37.427 回答