我想在我的所有视图上添加一个黑屏,然后在其上方显示一个通知窗口,如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];
那么这样的事情是如何实现的呢?
答案 0 :(得分: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];
它适用于我,状态栏也包括在内:)
答案 1 :(得分: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];
“view” - 您的自定义弹出窗口。
答案 2 :(得分: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
答案 3 :(得分: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];
我希望这能解决你的问题,欢呼,吉姆。