iOS - 具有透明度的 presentViewController

Posted

技术标签:

【中文标题】iOS - 具有透明度的 presentViewController【英文标题】:iOS - presentViewController with transparency 【发布时间】:2012-08-09 19:02:47 【问题描述】:

我想以半透明的方式全屏显示视图控制器,以便我仍然可以看到它下面的视图。以下代码展示了新的视图控制器,但它替换了当前的。保持原始视图控制器可见的最佳方法是什么?新视图控制器的视图将具有半透明的黑色背景。

NewViewController* newVC = [[NSClassFromString(@"NewViewController") alloc] initWithNibName:deviceNib bundle:nil];
newVC.modalPresentationStyle = UIModalPresentationFullScreen;
newVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;


[self presentViewController:newVC animated:YES completion:NULL];

【问题讨论】:

【参考方案1】:

呈现半透明视图,而不是视图控制器。

mySemiTransparentView.alpha = 0.0f;
[self.view addSubview:mySemiTransparentView];

mySemiTransparentView 是您的全屏视图。您可以将其设置为动画:

[UIView beginAnimations:@"fadeIn" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.4f];
mySemiTransparentView.alpha = 0.5f;
[UIView commitAnimations];

【讨论】:

没错,但我想使用视图控制器。 你仍然可以通过 alloc/init 实例化你的 UIViewController,然后 mySemiTransparentView 可以只是你的 ViewController.view 除非您希望半透明视图上的所有内容都是 0.5 alpha(包括按钮等),否则不要设置视图的 alpha,因为它会级联到所有子组件。你最好创建一个占据整个屏幕的背景视图,它是 0.5 alpha,然后将你的按钮等分层。【参考方案2】:

您可以通过以下方式呈现半透明模态控制器:

NewViewController* newVC = [[NSClassFromString(@"NewViewController") alloc] initWithNibName:deviceNib bundle:nil];

self.modalPresentationStyle = UIModalPresentationCurrentContext;
newVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentViewController:newVC animated:YES completion:NULL];

请注意,您必须将常量 UIModalPresentationCurrentContext 设置为 self.modalPresentationStyle,而不是 newVC.modalPresentationStyle

此外,当您使用 UIModalTransitionStyleCrossDissolve 时,newVC.view 的 alpha 将在过渡期间被覆盖,因此如果您想要半透明背景,则需要保持 newVC.viewbackgroundColor 清晰,只需添加另一个 UIView,因为它是具有半透明 backgroundColor

的子视图

【讨论】:

self.modalPresentationStyle = UIModalPresentationCurrentContext;newVC. modalPresentationStyle = UIModalPresentationCustomand + 1 也用于答案的第二部分。谢谢

以上是关于iOS - 具有透明度的 presentViewController的主要内容,如果未能解决你的问题,请参考以下文章

具有透明背景和不透明前景的 iOS 模态 ViewController

如何创建具有适当不透明度的 UITextField 附件视图 iOS7,甚至复制键?

iOS:具有透明背景的模态 ViewController

iOS 7状态栏半透明,具有向后兼容性

具有透明背景的 iOS 应用程序图标在设备上显示黑色背景

具有透明背景的 iOS Action 应用扩展?