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.view 的 backgroundColor 清晰,只需添加另一个 UIView,因为它是具有半透明 backgroundColor
的子视图【讨论】:
self.modalPresentationStyle = UIModalPresentationCurrentContext;
或 newVC. modalPresentationStyle = UIModalPresentationCustom
and + 1 也用于答案的第二部分。谢谢以上是关于iOS - 具有透明度的 presentViewController的主要内容,如果未能解决你的问题,请参考以下文章
具有透明背景和不透明前景的 iOS 模态 ViewController