6

我想在我的所有视图上添加一个黑屏,然后在其上方显示一个通知窗口,就像在 Tweetbot 3 中一样:

在此处输入图像描述

但是,我不完全确定这是如何完成的。

添加一个以屏幕大小为框架的暗视图不起作用,如下所示:(导航栏和状态栏未覆盖)

UIView *darkOverlay = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
darkOverlay.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
[self.view insertSubview:darkOverlay behindSubview:self.view];

这涵盖了除状态栏之外的所有内容(所以它非常接近,但由于我的状态栏内容很轻,它仍然非常刺耳):

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

那么这样的事情是如何完成的呢?

4

4 回答 4

3

你必须这样做:

CGRect screenRect = [[UIScreen mainScreen] bounds];
_darkCoverView = [[UIView alloc] initWithFrame:screenRect];
_darkCoverView.backgroundColor = [UIColor blackColor];
_darkCoverView.alpha = 0.5;

[[[[UIApplication sharedApplication] delegate] window] addSubview:_darkCoverView];

它对我有用,状态栏也被覆盖了:)

于 2013-11-11T14:00:57.097 回答
3

你可以试试这个方法

    UIWindow* window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    window.windowLevel = UIWindowLevelAlert;
    window.opaque = NO;

    [window addSubview:someView];

    // window has to be un-hidden on the main thread
    [window makeKeyAndVisible];

其中“视图” - 是您的自定义弹出窗口。

于 2013-11-11T14:08:56.127 回答
1

您可以尝试简单地以模态方式呈现它,因为模态视图控制器位于导航控制器之上。

TransparancyViewController *vc=[[TransparancyViewController alloc]initWithNibName:@"TransparancyViewController" bundle:nil] ;
vc.view.backgroundColor = [UIColor clearColor];
navController.view.alpha = 0.3;
navController.modalPresentationStyle = UIModalPresentationCurrentContext;
[navController presentViewController:vc animated:NO completion:nil];

用于情节提要的小示例项目.. http://cl.ly/442C11341k2G

于 2013-11-05T00:56:54.393 回答
0

当您创建 darkOverlayView 时,最好指定视图的实际边界,它应该填满整个屏幕(使用 iPhone 5 的宽度、高度)。

UIView *darkOverlay = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320, 568)];

如果您的通知对象也是 UIView,请将其放在前面。

[self.view addSubView:darkOvelay]
[self.view bringSubviewToFront:notificationView];

我希望这能解决你的问题,干杯,吉姆。

于 2013-11-05T00:45:52.013 回答