加载黑色背景的模态视图控制器
Posted
技术标签:
【中文标题】加载黑色背景的模态视图控制器【英文标题】:Modal View Controller loading with black background 【发布时间】:2013-03-17 22:17:34 【问题描述】:我通过搜索看到了其中一些问题,但主要与故事板有关。
我只是务实地创建一个模态视图控制器。它实际上是用于可达性的,一旦连接被视为 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 并在可达性更新时调用,所以我试图在解决互联网连接时显示一个模式视图控制器。
【问题讨论】:
是否试图将模态视图设置为小于视图本身?如果是这样,为什么不使用 cg rect 并为其设置坐标,以便在呈现时它会比视图小。 【参考方案1】:模态视图不支持透明度(适用于 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
存储为属性,以便将来访问它。
【讨论】:
你能解释一下如何做到这一点吗?作为更多背景知识,它在整个应用程序的任何地方用作向用户发送的消息,因此当与 Internet 的连接丢失时,在应用程序委托中进行设置。 感谢编辑,我收到两个错误。 [self.view 行...在应用程序委托上找不到属性视图。这是因为我无法向应用程序委托添加视图,我需要将其添加到呈现的视图控制器(以当前显示的为准),但我不确定如何执行此操作?其次,frame.y 行的错误...没有名为 y 的成员在 struct CGRect 上? 编辑了第二期。您可以尝试将子视图添加到UIWindow
。 [[[UIApplication sharedApplication] keyWindow] addSubview:modalViewController.view];
谢谢,这可行,但我有一个问题,如果应用程序(从新)启动并且没有可用的互联网连接,它不会显示。我认为问题在于上面的视图是在加载实际主视图之前显示的。无论如何我可以解决这个问题,你会说这应该是一个新问题吗?
另外,我如何检查这个视图是否正在呈现,如果连接恢复则删除这个子视图?【参考方案2】:
你需要的是第二个UIWindow
AppDelegate
类
你可以在一切之上制作类似 UIAlertView 的东西!
相信我,这就是你所需要的,并确保设置
myWindow2.windowLevel = UIWindowLevelAlert;
访问您的窗口(获取指针):
UIWindow *myWindow2 = [(AppDelegate *)[UIApplication sharedApplication].delegate myWindow2];
【讨论】:
您能提供更多关于需要完成什么的信息吗?我应该继承 UIAlertView 并更改 viewDidLoad 以包含视图的配色方案吗?那么这是如何呈现的呢? 对于警报,您的选项是 ios 默认警报(UIAlertView 或 UIActionSheet)或创建您自己的:1-向 AppDelegate 添加一个窗口并将其级别设置为警报级别。 2-添加您的自定义警报,这是一个 UIView 基类,具有标题标签、文本标签和一些按钮,然后使用 window.hidden = [YES/NO] 来显示您的警报!以上是关于加载黑色背景的模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章