今天尝试着在一个ViewController上面调用:

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated  


来展示一个半透明的viewController:

 

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. UIViewController *vc = [[[UIViewController alloc] init] autorelease];  
  2. vc.view.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];  
  3. [self presentModalViewController:vc animated:YES];  


这样可以发现在动画过程中是半透明的,但是动画结束后就看不到下面一个viewController的内容了,变黑色了。

 

为什么呢?搜索了一番得到一份比较合理的结论:

 

The “problem” is that iOS is very finicky about not wasting memory,

and since the modal view will completely cover the one beneath it,

it doesn’t make much sense to keep it loaded.

Therefore, iOS unloads the view that presents the modal one.

You may check this behavior by implementing -viewWillDisappear: and -viewDidDisappear:.

最终在SO上找到这么个问题,以及一份可行的方案

 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. viewController.view.backgroundColor = [UIColor clearColor];  
  2. rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;  
  3. [rootViewController presentModalViewController:viewController animated:YES];  


这里有两个点:一是设置modalPresentationStyle为UIModalPresentationCurrentContext,二是需要在rootViewController上操作。

 

http://blog.csdn.net/jasonblog/article/details/17172969

arrow
arrow
    全站熱搜

    pcwiki 發表在 痞客邦 留言(0) 人氣()