在变暗的 UIWindow 上显示 UIView

Posted

技术标签:

【中文标题】在变暗的 UIWindow 上显示 UIView【英文标题】:Present UIView over darkened UIWindow 【发布时间】:2013-04-05 04:59:55 【问题描述】:

我正在尝试呈现 UIView,同时使屏幕的其余部分变暗。但是,我遇到了困难。这是我的代码:

UIWindow *window = [[UIApplication sharedApplication] keyWindow];

self.viewToDarken = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];
[self.viewToDarken setBackgroundColor:[UIColor blackColor]];
[self.viewToDarken setAlpha:0.0f];
[window insertSubview:self.viewToDarken aboveSubview:self.hostView];

[self.hostView addSubview:self];


[UIView animateWithDuration:0.25f
                      delay:0.0
                    options:UIViewAnimationCurveLinear
                 animations:^(void) 
                     [self setFrame:[self destinationFrame]];
                     if (self.viewToDarken) self.viewToDarken.alpha = 0.7f;
                 completion:^(BOOL finished) 
                     [self notifyDidShow];
                 ];

但是,我无法让视图变暗以放置在我添加的视图下方(自我)。任何想法为什么这不起作用?

谢谢!

【问题讨论】:

会是 self.view 而不是 self 吗?你可以试试.. 不,这不是视图控制器,而是视图 那我觉得应该是[self addSubview:self.hostView]; 【参考方案1】:

您将在self.hostView 上方添加viewToDarken,然后将self 添加到hostView,所以当然self 将低于viewToDarken。您需要在self.hostView 下方添加viewToDarken

你现在拥有的是:

hostView + self(view)(下)-> viewToDarken

你需要

viewToDarken(下)-> hostView + self(view)

你应该有:

[window insertSubview:self.viewToDarken belowSubview:self.hostView];

【讨论】:

【参考方案2】:

您在这里有 3 个视图; selfhostViewviewToDarken。您在hostView 上方插入viewToDarken,然后将self 添加到hostView。因为selfhostView 的子视图,所以它会在hostView 在下面的任何视图之下。

您可能希望将viewToDarken 添加到hostView。或者您可以将其插入hostView 后面,如下所示:

[self.hostView.superview insertSubview:self.viewToDarken belowSubview:self.hostView];

无论采用哪种方式,都需要考虑坐标系。请务必查看-[UIView convertRect:fromView:]

另外,不要对帧使用绝对的“魔术”数字,而是使用 window.bounds:

self.viewToDarken = [[UIView alloc] initWithFrame:window.bounds];

【讨论】:

以上是关于在变暗的 UIWindow 上显示 UIView的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不使背景变暗的情况下在 iPad 上呈现模态视图控制器?

使 UIView 或 CALayer 变暗的最快方法(性能方面)

页面弹框背景变暗的效果

unity在切换场景时,场景灯光变暗的问题

发送到后台后,导航和标签栏变暗的应用

jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果