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