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