【问题标题】:How to make a view have a semi-transparent border and show the view below如何使视图具有半透明边框并显示下面的视图
【发布时间】:2012-05-06 19:28:51
【问题描述】:

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

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

这有意义吗?

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

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

内森

【问题讨论】:

标签: iphone objective-c ios uiviewcontroller uitabbarcontroller


【解决方案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 值,使其看起来像透明。

【讨论】:

  • 我只记得,我从一个 SO question 中得到了这个想法。 stackoverflow.com/questions/849458/…
  • 谢谢乔尔。作为一个 iPhone 应用程序新手,我读过有关 IOS 如何卸载视图的信息,但一分钱并没有掉!现在你解释一下,这很有意义:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 2018-08-22
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多