在黑暗的UIWindow上展示UIView

时间:2013-04-05 04:59:55

标签: ios objective-c uiview uiwindow

我试图呈现一个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];
                 }];

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

谢谢!

2 个答案:

答案 0 :(得分:0)

您正在viewToDarken上方添加self.hostView,然后将self添加到hostView,因此当然自我将低于viewToDarken。您需要在viewToDarken下方添加self.hostView

你现在拥有的是:

hostView + self(查看)(下方) - > viewToDarken

你需要

viewToDarken(下方) - > hostView + self(查看)

你应该:

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

答案 1 :(得分:0)

这里有3个视图; selfhostViewviewToDarken。您正在viewToDarken上方插入hostView,然后将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];