呈现具有半透明背景的模态ViewController

时间:2016-06-30 06:41:21

标签: ios objective-c

我在SecondViewController上以FirstViewController模式呈现,SecondViewController具有半透明背景(白色,不透明度为70%)。

我面临的问题是当我出示SecondViewController时,FirstViewController的视图在SecondViewController完成呈现之前仍然可见。

这使得UI看起来很滞后。我期待的行为是SecondViewController出现后,FirstViewController的视图应该不可见,或者在SecondViewController的视图出现之前逐渐消失。

任何帮助将不胜感激!

我用来呈现的代码是:

SecondViewController *cntrlr = (SecondViewController *)[[UIStoryboard activationStoryboard] instantiateViewControllerWithIdentifier:@“UserVC”];
[cntrlr setModalPresentationStyle:UIModalPresentationPopover];
[self presentViewController:cntrlr animated:YES completion:nil];

2 个答案:

答案 0 :(得分:0)

SecondViewController *cntrlr = (SecondViewController *)[[UIStoryboard activationStoryboard] instantiateViewControllerWithIdentifier:@“UserVC”];
[cntrlr setModalPresentationStyle:UIModalPresentationPopover];
self.view.alpha = 0.0f;  
[self.navigationController.navigationBar setHidden:YES];
[self presentViewController:cntrlr animated:YES completion:nil];

// Need to set FirstViewController alpha 1.0f after dismisViewControlle - [R

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    self.view.alpha = 1.0f;
    [self.navigationController.navigationBar setHidden:NO];
}

答案 1 :(得分:0)

在iOS 3.2之后,有一种方法可以在没有任何“技巧”的情况下执行此操作 - 请参阅modalPresentationStyle属性的文档。你有一个rootViewController,它将呈现viewController。所以,这是成功的代码:

viewController.view.backgroundColor = [UIColor clearColor];
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
[rootViewController presentModalViewController:viewController animated:YES];

使用此方法,viewController的背景将是透明的,底层的rootViewController将是可见的。