2

可能是一个新手问题,但是....我正在编写一个使用 UITabBarController 的 iPhone 应用程序。在 Interface Builder 中,我在 MainWindow.xib 中设置了选项卡栏。我有 4 个选项卡,每个选项卡都设置为加载相应 UIViewController 子类的 xib。我在 xib 文件中为 Interface Builder 中的每个 UIViewController 子类创建了视图。一切正常,我可以点击每个选项卡,它会显示正确 UIViewController 的视图

但我真正想要的是 UIViewController 子类之一的视图在所有 4 个边缘上都有一个大约 30px 的半透明边框,以便它显示后面视图的边缘,有点灰显。IE。第一个选项卡是主应用程序,它占据了整个屏幕(减去状态和选项卡栏区域)。选项卡 2 用于保存,我希望它看起来像主应用程序顶部的一个小模式窗口。(如果我将其作为一个 html Web 应用程序,我将使用的术语和技术将是一个 jQuery 覆盖)

这有意义吗?

我尝试过使用 presentModalViewController ,但这使情况变得更糟,因为它占据了整个屏幕,包括状态和标签栏区域。

任何帮助或指点都非常感谢干杯

弥敦道

4

1 回答 1

1

您的 UIViewController 不能对其下方的视图透明,因为 iphone 可能会卸载其下方当前未显示的视图(以节省内存)。

我使用的最佳解决方案是在推送新视图控制器之前拍摄当前视图的照片,然后将其用作背景图像(伪造透明度)。这是我如何实现的:

NewViewController *newView = [[NewViewController alloc] init];
shareVC.imageBackground = [Utilities getScreenshot:self.view];
[self presentModalViewController:newView animated:YES];
[newView release];  

然后在您的 newViewController 上执行此操作(在 viewDidLoad、viewWillAppear 等上):

[imageView setImage:imageBackground];

这是截图功能

+(UIImage *)getScreenshot:(UIView *)_view {
    //take a screenshow of the parent view so we can add it as a background to the modal view
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
        UIGraphicsBeginImageContextWithOptions(_view.window.bounds.size, NO, [UIScreen mainScreen].scale);
    else
        UIGraphicsBeginImageContext(_view.window.bounds.size);
    [_view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

然后,您需要使用 UIImageView 作为背景设置新视图,并为该 imageView 选择正确的 Alpha 值,使其看起来像透明。

于 2012-05-06T20:16:11.823 回答