模态视图控制器加载黑色背景

时间:2013-03-17 22:17:34

标签: ios objective-c uiviewcontroller modalviewcontroller presentmodalviewcontroller

我通过搜索看到了一些这些问题,但主要与故事板有关。

我只是务实地创建一个模态视图控制器。它实际上是为了使用可达性,一旦连接被视为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,每当Reachability更新时调用,所以我试图在解析Internet连接时显示模态视图控制器。

2 个答案:

答案 0 :(得分: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存储为属性,以便将来访问它。

答案 1 :(得分:1)

您需要的是UIWindow课程中的第二个AppDelegate 你可以在所有东西之上制作像UIAlertView这样的东西! 相信我,这就是你需要的,并确保设置

myWindow2.windowLevel = UIWindowLevelAlert;

访问你的窗口(获取指针):

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