iPhone модальный Вид с родительским видом полу виден? - PullRequest
1 голос
/ 16 мая 2010

Я добавляю модальное представление, используя следующий код:

[self presentModalViewController:phrasesEditor animated:YES];

Как сделать модальный вид полупрозрачным, чтобы суперпредставление «просвечивало»?

Мой полный метод / функция выглядит так:

-(IBAction)showEditPhrases:(id)sender{
    PhrasesViewController *phrasesEditor = [[PhrasesViewController alloc] initWithNibName:@"PhrasesViewController" bundle:nil];
    phrasesEditor.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [phrasesEditor.view setAlpha: 0.5];
    [phrasesEditor.view setBackgroundColor: [UIColor clearColor]];
    [self presentModalViewController:phrasesEditor animated:YES];
    [phrasesEditor release];
}

EDIT:

Прагматичный подход к изменению альфа, по-видимому, не сработает. Как я могу загрузить NIB в UIView и взаимодействовать с ним?

Теперь у меня есть UIViewController. Должен ли я преобразовать / изменить / изменить его в UIVIew и затем загрузить его, или я должен сделать что-то еще?

РЕДАКТИРОВАТЬ 2:

Я пытался [self.view addSubview:phrasesEditor.view];, но у меня нет возможности удалить подпредставление. Кажется, что каждое представление имеет свой собственный View Controller.

РЕДАКТИРОВАТЬ 3:

Я подумал, что должен упомянуть, что суперпредставление находится внутри контроллера представления с именем iDecideViewController, а phrasesEditor имеет отдельный контроллер представления.

Ответы [ 2 ]

1 голос
/ 21 октября 2011

У меня была та же проблема, и я добавил свойство и 2 метода в подкласс UIViewController, чтобы имитировать поведение presentModalViewController: animated:

Более подробную информацию см. В моем блоге: Как отобразить прозрачный модальный контроллер вида или проверьте код ниже:

#pragma mark - Transparent Modal View
-(void) presentTransparentModalViewController: (UIViewController *) aViewController 
                                     animated: (BOOL) isAnimated 
                                    withAlpha: (CGFloat) anAlpha{

    self.transparentModalViewController = aViewController;
    UIView *view = aViewController.view;

    view.opaque = NO;
    view.alpha = anAlpha;
    [view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        UIView *each = obj;
        each.opaque = NO;
        each.alpha = anAlpha;
    }];

    if (isAnimated) {
        //Animated
        CGRect mainrect = [[UIScreen mainScreen] bounds];
        CGRect newRect = CGRectMake(0, mainrect.size.height, mainrect.size.width, mainrect.size.height);


        [self.view addSubview:view];
        view.frame = newRect;

        [UIView animateWithDuration:0.8
                         animations:^{
                             view.frame = mainrect;
                         } completion:^(BOOL finished) {
                             //nop
                         }];

    }else{
        view.frame = [[UIScreen mainScreen] bounds];
        [self.view addSubview:view];
    }






}

-(void) dismissTransparentModalViewControllerAnimated:(BOOL) animated{

    if (animated) {
        CGRect mainrect = [[UIScreen mainScreen] bounds];
        CGRect newRect = CGRectMake(0, mainrect.size.height, mainrect.size.width, mainrect.size.height);
        [UIView animateWithDuration:0.8
                         animations:^{
                             self.transparentModalViewController.view.frame = newRect;
                         } completion:^(BOOL finished) {
                             [self.transparentModalViewController.view removeFromSuperview];
                             self.transparentModalViewController = nil;
                         }];
    }


}
0 голосов
/ 17 мая 2010

Когда вы представляете модальное представление, оно фактически выгружает предыдущее представление, так что это совсем не то, что вам нужно. В UIView есть метод addSubview, который помещает новый вид поверх своих братьев и сестер.

Вместо:

[self presentModalViewController:phrasesEditor animated:YES];

сделать:

[self.view addSubview:phrasesEditor.view];

Предполагается, что вы уже находитесь в подклассе ViewController.

...