【问题标题】:Dimming all the views in the background of a button使按钮背景中的所有视图变暗
【发布时间】:2017-12-18 01:37:38
【问题描述】:

我在视图的右上角有一个菜单按钮 (+),当按下按钮时,会下拉几个其他按钮供用户选择。

我想有效地使所有这些按钮下方的所有视图变暗。

我目前的做法是在所有内容之上设置一个透明视图,并在单击按钮后更改背景颜色及其透明度。

if button.isHidden {
    self.dimView!.backgroundColor = UIColor.black
    self.dimView!.alpha = 0.7
} else {
    self.dimView!.alpha = 0
}

这种方法是否有效?从不会干扰触摸并且不会减慢手机速度的意义上说是有效的吗?

【问题讨论】:

  • 如果这个视图在后台,那么它不会干扰下拉按钮的触摸。
  • @ShamasS 视图位于后台的表格视图和其他标签之上,即使它位于这些视图之上,它似乎也不会干扰触摸,但我不确定它是否会导致表格视图滞后。

标签: ios swift uiview uibutton


【解决方案1】:

当 alpha 高于 0.5 时,您的调暗视图应该禁用对其覆盖的视图的点击。

如果将 alpha 设置为 0,则应该设置 view.hidden=true。这样,渲染系统就不会尝试将其与屏幕上的其他视图合成。 (在将 alpha 设置为 0.7 之前设置 hidden=falsehidden=true 除了/而不是将 alpha 设置为 0。除非您为 alpha 更改设置动画,否则 hidden=true,alpha 值是无关紧要的。)

【讨论】:

  • 谢谢,这是我一直在寻找的东西,但为了清楚起见,这是最好的方法吗?
  • 我不确定最好的方式,但这是我所做的,而且效果很好。
【解决方案2】:

那么透明视图应该位于 ViewController 的所有子视图的背景中,以达到预期的效果。

关于高效和优化的方式,最好设置视图的 opaque 属性,这里是描述:-

“不透明”属性为绘图系统提供了一个提示,说明它是如何实现的 应该对待视图。如果设置为 true,绘图系统将处理 视图完全不透明,这允许绘图系统优化一些 绘图操作和提高性能。如果设置为 false,则 绘图系统通常将视图与其他内容组合在一起。这 此属性的默认值为 true。

一个不透明的视图应该用完全不透明的填充它的边界 内容——也就是说,内容的 alpha 值应为 1.0。如果 视图是不透明的,要么不填充其边界,要么完全包含 或部分透明的内容,结果是不可预测的。你 如果视图是,则应始终将此属性的值设置为 false 完全或部分透明。

代码应该是这样的:-

view.backgroundColor = UIColor.black.withAlphaComponent(0.75)
view.isOpaque = false

【讨论】:

  • 对不起,我认为我的问题不是很清楚,我在所有标签和按钮之上添加了一个常规视图,但在我的 (+) 按钮下方。当我单击此按钮时,我会将放置在其他视图之上的视图变为黑色并使其透明。
猜你喜欢
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2013-04-07
  • 1970-01-01
  • 2017-03-07
  • 2019-06-11
相关资源
最近更新 更多