3

我已经通过搜索看到了一些这些问题,但主要与故事板有关。模态视图控制器加载黑色背景

我只是在实用上创建一个模态视图控制器。它实际上是与可达性的使用中,一旦连接被视为NotReachable我提出一个模式视图控制器是这样的:

-(void)checkConnection: (Reachability*) curReach { 
    NetworkStatus netStatus = [curReach currentReachabilityStatus]; 
     if (netStatus == NotReachable) { 
      NSLog(@"inernet reach - not reachable"); 

      UIViewController *modalViewController = [[MESConnectionModalViewController alloc] init]; 
      modalViewController.view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2f]; 
      modalViewController.view.opaque= YES; 
      [self.window.rootViewController presentModalViewController:modalViewController animated:YES]; 

} 
} 

在视图控制器MESConnectionModalViewController目前还没有代码,只是标准。

当模态视图转换到当前视图时,背景看起来是正确的(这是短暂的一两秒钟)。一旦模态完全在屏幕上,它就是全黑的,而不是部分黑色。我期望基本上略微覆盖当前的内容。上面的代码在应用程序委托中seutp,并在可达性更新时调用,因此我试图在互联网连接正在解析时显示模式视图控制器。

+0

试图设置模式视图比视图本身较小?如果是这样,为什么不使用cg rect并为其设置坐标,因此当它被呈现时它将比视图更小。 – 2013-03-17 22:35:16

回答

5

模态视图不支持透明度(对于iPhone)。
但您可以添加“的UIView”到父视图并使用CoreAnimation

编辑

-(void)checkConnection: (Reachability*) curReach { 
    NetworkStatus netStatus = [curReach currentReachabilityStatus]; 
    if (netStatus == NotReachable) { 
     NSLog(@"internet reach - not reachable"); 
     UIViewController *modalViewController = [[MESConnectionModalViewController alloc] init]; 
     //Set y position to animate it 
     CGRect frame = modalViewController.view.frame; 
     frame.origin.y = [[UIApplication sharedApplication] keyWindow].frame.size.height; 
     modalViewController.view.frame = frame; 
     modalViewController.view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2f]; 
     [self.view addSubview:modalViewController.view]; 
     //Animate appearing 
     frame.origin.y = 0; 
     [UIView animateWithDuration:0.2 animations:^{ 
      modalViewController.view.frame = frame; 
     }]; 
    } 
} 

您还可以存储modalViewController作为财产的存取权限它在未来制作动画。

+0

你能解释一下怎么做吗?作为一个更多的背景,它被用作在整个应用程序中的任何地方向用户发送消息,所以当连接到互联网丢失时,在应用程序委托中进行设置。 – StuartM 2013-03-18 07:56:12

+0

感谢您的编辑,我得到两个错误。 [self.view line ...属性视图在应用程序委托上找不到。这是因为我无法将视图添加到应用程序委托中,我需要将其添加到呈现的视图控制器(以当前显示的那个为准),但我不确定如何执行此操作?其次,在frame.y行上的错误...在struct CGRect上没有名为y的成员? – StuartM 2013-03-18 17:28:36

+0

编辑第二期。您可以尝试将子视图添加到“UIWindow”。 [[[UIApplication sharedApplication] keyWindow] addSubview:modalViewController.view]; – 2013-03-18 17:48:24

1

你需要的是第二个UIWindowAppDelegate类 你可以在所有东西上做一些像UIAlertView! 相信我,这是你需要什么,并确保设置

myWindow2.windowLevel = UIWindowLevelAlert; 

访问你的窗口(得到的指针):

UIWindow *myWindow2 = [(AppDelegate *)[UIApplication sharedApplication].delegate myWindow2]; 
+1

你能否提供更多关于需要完成什么的信息?我应该继承UIAlertView并更改viewDidLoad以包含视图的颜色方案吗?那么这是如何呈现的? – StuartM 2013-03-18 07:57:10

+0

用于提醒您的选项是iOS默认警报(UIAlertView或UIActionSheet)或创建您自己的:1 - 向AppDelegate添加一个窗口并将其级别设置为警报级别。 2-添加自定义警报,这是一个UIView基类,它有一个标题标签,文本标签和一些按钮,然后使用window.hidden = [YES/NO]来显示警报! – 2013-03-18 17:22:12