1

单击 MKMapView 标注气泡时,我触发了一个

DetailsViewController *details = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
[self presentModalViewController:details animated:YES];
[details release];

在 DetailsViewController 中,我将背景设置为透明:

self.view.backgroundColor = [UIColor colorWithHue:0.0 saturation:0.0 brightness:1.0 alpha:0.2];

当我单击标注时,我看到动画开始(出现 DetailsView 并且是透明的),但是当动画完成后,它不再透明。

4

1 回答 1

3

问题是当你呈现一个新视图时,它会控制屏幕,所以你的背景视图消失了。

这种行为是正确的,因为假设您一直打开新视图并堆叠它们,操作系统无法在后台保存您的所有视图!它只是简单地使然后消失。

你可以让你的视图出现在第一个视图之上,而不是让一个新的视图控制器出现并控制屏幕。

尝试这样的事情,让我知道它是如何进行的(我只是在这里编写了代码,所以我不能向你保证它的工作,但你肯定明白这个想法):

   DetailsViewController *details = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
    details.view.frame = self.view.frame;
    details.view.backgroundColor = [UIColor colorWithHue:0.0 saturation:0.0 brightness:1.0 alpha:0.2];
    [self.view addSubview:details.view];
    [details release];

我以前做过,而且可能,但我不能向您保证您的应用程序的稳定性。

其他“更清洁”的解决方案是让您的新视图成为旧视图的一部分。您可以将它设置在底部(隐藏),这样用户就看不到它,并且当您需要它时,您可以使用动画将其放在主屏幕中。问题是您将把 2 个控制器合并为一个。

于 2012-06-15T07:31:43.957 回答