0

我正在尝试呈现 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];
                 }];

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

谢谢!

4

2 回答 2

0

您正在添加viewToDarken上面self.hostView然后添加selfhostView所以当然 self 将在下面viewToDarken。您需要在viewToDarken下面添加self.hostView

你现在拥有的是:

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

你需要

viewToDarken(下)-> hostView + self(视图)

你应该有:

[window insertSubview:self.viewToDarken belowSubview:self.hostView];
于 2013-04-05T05:07:51.820 回答
0

您在这里有 3 个视图;self,hostViewviewToDarken. 您正在插入viewToDarken上述hostView内容,然后您正在添加self到 hostView。因为self是 的子视图hostView,所以它会在下面的任何视图hostView之下。

您可能想要添加viewToDarkento hostView。或者您可以将其插入到类似的后面hostView

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

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

此外,不要对框架使用绝对​​的“魔术”数字,而是使用 window.bounds:

self.viewToDarken = [[UIView alloc] initWithFrame:window.bounds];
于 2013-04-05T05:10:51.520 回答