如何使背景视图变暗

Posted

技术标签:

【中文标题】如何使背景视图变暗【英文标题】:how to dim background view 【发布时间】:2014-05-27 10:57:04 【问题描述】:

当我使用自定义模式视图控制器时尝试使背景视图变暗,我将背景颜色设置为灰色,不透明度为 0.5:

- (void)rulesTapped:(id)sender

    RulesVC *rulesVC = [[RulesVC alloc] init];

    self.view.backgroundColor = [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:0.5];
    rulesVC.modalPresentationStyle = UIModalPresentationCustom;
    rulesVC.transitioningDelegate = self;
    [self presentViewController:rulesVC animated:YES completion:nil];

但是当我在关闭模态 VC 时尝试将其设置回 whiteColor(或黄色)时,这种变暗保持在原位:

- (void) gotItTapped:(id)sender


    [self.presentingViewController.view setBackgroundColor:[UIColor yellowColor]];

    [self dismissViewControllerAnimated:YES completion:nil];


为什么?有没有办法在不添加另一个覆盖视图而只使用现有视图操作的情况下使背景变暗(然后移除变暗)视图?

【问题讨论】:

【参考方案1】:

如果不向您的UIViewController 添加其他元素,我认为您无法实现它。我通常插入一个UIView,它是setHidden:YES,alpha 0.0f 和blackColor 作为backgroundColor。显示某些东西时,我总是将其设置为 Hidden:NO 并将其动画设置为不透明度 0.6f。

[UIView animateWithDuration:0.5f animations:^
    [self.view setAlpha:0.6];
];

这样它不会立即出现并且看起来更平滑。

【讨论】:

【参考方案2】:

我实际上需要这个能够将其他一些 UIView 放入昏暗视图中,并且在此昏暗视图之外的每次点击都会关闭内置 UIView 和昏暗视图。我发现,为此最好的方法是模仿一个按钮,该按钮在单击时从超级视图中删除:

self.dimView = [UIButton buttonWithType:UIButtonTypeCustom];
self.dimView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2f];
self.dimView.frame = CGRectMake(0,
                                0,
                                self.view.frame.size.width,
                                self.view.frame.size.height);
[self.dimView addTarget:self
                 action:@selector(removeDimView)
       forControlEvents:UIControlEventTouchUpInside];  

【讨论】:

以上是关于如何使背景视图变暗的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不使背景变暗的情况下在 iPad 上呈现模态视图控制器?

如何防止工作表在 SwiftUI 中使其后面的视图变暗或删除不必要的填充?

使视图变暗,就像禁用一样

材质背景上的 SwiftUI contextMenu 在激活时会使内容变暗

以编程方式使视图变暗

如何使自定义 UIButton 变暗