创建一个黑色透明模态视图控制器

时间:2011-09-27 05:23:26

标签: iphone objective-c ipad

我想创建一个黑色背景的模态视图控制器,但我想将alpha设为0.9,所以我仍然可以看到它背后的视图。我该怎么做呢?我知道我可以使用UIView然后将其添加为子视图,但是如果我有UINavigationController或UITabBarController,这将不会覆盖整个屏幕。寻找一些关于此的建议,据我所知,到目前为止我看到的解决方案从未处理过彩色背景..大多数人只想要一个透明的背景。

4 个答案:

答案 0 :(得分:6)

This会帮助你...

您只需根据您的要求设置背景颜色。

答案 1 :(得分:0)

你试过吗

[viewController1 presentModalViewController:viewController2 animated:YES];

我自己没有尝试过,但文档说它总是全屏呈现。然后将其视图设置为backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.9];。 (白色= 0.0是黑色)。添加您想要的任何子视图。或者将背景颜色设置为全黑,将整个视图的alpha设置为0.9。这取决于您是否希望子视图也有点半透明。

答案 2 :(得分:0)

我从https://gist.github.com/1279713

得到了这个想法

<强>准备: 在模态视图xib(或使用故事板的场景)中,我设置了全屏幕背景UIImageView(用.h文件钩住它并给它一个属性“backgroundImageView”)0.3 alpha。我将视图(UIView)背景颜色设置为纯黑色。

<强>思想: 然后在模态视图控制器的“viewDidLoad”中,我从原始状态捕获屏幕截图并将该图像设置为背景UIImageView。将初始Y点设置为-480,并使用EaseInOut动画选项使用0.4秒的持续时间将其滑动到Y点0。当我们关闭视图控制器时,只需做相反的事情。

模态视图控制器类的代码

.h文件:

@property (weak, nonatomic) IBOutlet UIImageView *backgroundImageView;
- (void) backgroundInitialize;
- (void) backgroundAnimateIn;
- (void) backgroundAnimateOut;

.m文件:

- (void) backgroundInitialize{
    UIGraphicsBeginImageContextWithOptions(((UIViewController *)delegate).view.window.frame.size, YES, 0.0);
    [((UIViewController *)delegate).view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * screenshot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    backgroundImageView.image=screenshot;
}
- (void) backgroundAnimateIn{
    CGRect backgroundImageViewRect = backgroundImageView.frame;
    CGRect backgroundImageViewRectTemp = backgroundImageViewRect;
    backgroundImageViewRectTemp.origin.y=-480;
    backgroundImageView.frame=backgroundImageViewRectTemp;

    [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
        backgroundImageView.frame=backgroundImageViewRect;
    } completion:^(BOOL finished) {

    }];
}
- (void) backgroundAnimateOut{
    CGRect backgroundImageViewRect = backgroundImageView.frame;
    backgroundImageViewRect.origin.y-=480;

    [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
        backgroundImageView.frame=backgroundImageViewRect;
    } completion:^(BOOL finished) {

    }];
}

在viewDidLoad中,只需调用:

[self backgroundInitialize];
[self backgroundAnimateIn];

在我们解雇模态视图控制器的任何地方,我们都会调用:

[self backgroundAnimateOut];

请注意,这将始终为背景图像设置动画。因此,如果此模态视图控制器转换样式(或segue过渡样式)未设置为“Cover Vertical”,则可能不需要调用动画方法。

答案 3 :(得分:-1)

首先在你的.h文件中添加一个UIImageView

UIImageView *overLayImage;

现在在viewDidLoad()

上的.m文件中添加以下代码
overLayImage=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"overlay1px.png"]] ;
overLayImage.frame = self.view.frame;
overLayImage.frame = CGRectMake(0, 0, 1024, 748);

其中“overlay1px.png”是您的颜色选择的透明图像,高度和宽度为1px X 1px。

现在,在您想要的IBAction中添加透明背景视图,添加以下代码

[self.view addSubview:overLayImage];

[vwTermsCondition setFrame:CGRectMake(262, 300, 500, 120)];
[vwTermsCondition.layer setCornerRadius:5.0f];
[vwTermsCondition.layer setShadowColor:[UIColor blackColor]];
[vwTermsCondition.layer setMasksToBounds:YES];
[self.view addSubview:vwTermsCondition];

在上面的代码中,vwTermsCondtion是视图的名称。这适用于iPad appplication,您可以调整iPhone的高度/宽度。

享受:)