如何使视图具有半透明边框并显示下面的视图

时间:2012-05-06 19:28:51

标签: iphone objective-c ios uiviewcontroller uitabbarcontroller

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

但我真正想要的是其中一个UIViewController子类的视图在所有4个边上都有一个大约30px的半透明边框,这样它就会显示后面的视图边缘,有点灰色。 IE浏览器。第一个选项卡是主应用程序,它占用整个屏幕(减去状态和标签栏区域).Tab 2是保存,我希望它看起来像主应用程序顶部的小模态窗口。 (如果我这样做是一个html网络应用程序,我将使用的术语和技术将是一个jQuery叠加层)

这有意义吗?

我尝试过使用presentModalViewController,但这会让它更糟糕,因为它会占用整个屏幕,包括状态和标签栏区域。

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

内森

1 个答案:

答案 0 :(得分: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值,使其看起来像是透明的。