在变暗的 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 个视图; self
、hostView
和 viewToDarken
。您在hostView
上方插入viewToDarken
,然后将self
添加到hostView。因为self
是hostView
的子视图,所以它会在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 上呈现模态视图控制器?