Представить 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];
                 }];

Тем не менее, я не могу заставить представление затемняться, чтобы оно располагалось ниже представления, которое я добавляю (я). есть идеи, почему это не работает?

Спасибо!


person Sean Danzeiser    schedule 05.04.2013    source источник
comment
будет ли это self.view вместо self ? ты можешь попробовать..   -  person iphonic    schedule 05.04.2013
comment
нет, это не контроллер представления, это представление   -  person Sean Danzeiser    schedule 05.04.2013
comment
Тогда я думаю, что это должно быть [self addSubview:self.hostView];   -  person iphonic    schedule 05.04.2013


Ответы (2)


Вы добавляете viewToDarken выше self.hostView, а затем добавляете self к hostView, поэтому, конечно, self будет ниже viewToDarken. Вам нужно добавить viewToDarken ниже self.hostView.

Что у вас есть сейчас:

hostView + self(view) (ниже) -> viewToDarken

Тебе нужно

viewToDarken (ниже) -> hostView + self (просмотр)

У вас должно быть:

[window insertSubview:self.viewToDarken belowSubview:self.hostView];
person random    schedule 05.04.2013

У вас есть 3 просмотра здесь; self, hostView и viewToDarken. Вы вставляете viewToDarken над hostView, а затем добавляете 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];
person David Beck    schedule 05.04.2013