【问题标题】:What is the impact of view.alpha = 0 vs view.hidden = YES?view.alpha = 0 vs view.hidden = YES 有什么影响?
【发布时间】:2011-07-06 00:57:18
【问题描述】:

透明度是邪恶的,在 iOS 设备上比在较重的机器上更是如此。因此,我想先使用view removeFromSuperView,如果不适用view.hidden=YES,最后使用view.alpha=0。但我实际上不知道幕后发生了什么。有区别吗,尤其是后两者?

我有一个UIView animateWithDuration:animations:completion: 场景,如果你把 hidden=YES 放在完成块中,它会隐藏而不让动画块完成。因此我不得不求助于 alpha=0。

一个人对另一个人的惩罚是什么? 干杯,EP。

【问题讨论】:

  • 在动画完成之前隐藏它应该不会有问题。但是,如果您这样做,请将代码放在支票中,例如if (finished) { view.hidden = YES; }

标签: ios cocoa-touch transparency


【解决方案1】:

我不确定是否仍会绘制 alpha 0.0 的视图。检查文档库:

隐藏视图

要在视觉上隐藏视图,您可以将其 hidden 属性设置为 YES 或将其 alpha 属性更改为 0.0。隐藏视图不接收来自系统的触摸事件。但是,隐藏视图确实参与了与视图层次结构相关的自动调整大小和其他布局操作。因此,隐藏视图通常是从视图层次结构中删除视图的便捷替代方法,尤其是当您计划很快再次显示视图时。

我也在这里找到了这个答案http://www.iphonedevsdk.com/forum/iphone-sdk-development/65525-whats-difference-between-alpha-0-hidden-yes.html

也就是说:

我相信 Cocoa Touch 会将小于 0.02 的 alpha 视为隐藏,因为低于 alpha 级别它是不可见的,Apple 的工程师决定不可见的控件不应该是可点击的。

使用 alpha 值要求图形硬件将对象中的每个像素与下面的所有内容混合。它是计算密集型的。另一方面,隐藏标志是一个开关。如果你打开它,操作系统就知道它根本不需要绘制对象。

【讨论】:

  • 你有一点错字,小于 0.02 被认为是不可见的。谢谢
  • 如果您愿意,可以省略第一个 0,这两种方法都是输入只有小数的数字的有效方法。
【解决方案2】:

alpha 为零的东西仍然被绘制,但是隐藏的视图不会重绘到屏幕上。因为这只发生在视图无论如何改变时,差异应该是微不足道的。如果您遇到性能问题,我强烈建议您使用时间分析器和核心动画工具进行分析。

【讨论】:

  • 有道理,谢谢。如果其中一个的 Alpha 值为零,您知道设备是否会在合成视图上浪费时间?
  • @epologee Apple 说假设它确实如此。
  • 好吧,这很清楚。你不会碰巧有一个链接到它所说的地方,供参考吗?
  • 可以根据我自己的经验确认 hidden = YES 的滚动性能更好。
【解决方案3】:

设置 alpha 而不是 hidden 属性的一个优点是 alpha 属性可以更好地播放动画。我有一个动画来显示/隐藏我的导航栏,当我使用 alpha 属性时,导航栏消失了,而 hidden 属性更加突然。

【讨论】:

  • 嗯,这仅仅是因为alpha 是可动画的,而hidden 不是(尝试插入一个布尔值;-))。所以,是的,如果你想淡入/淡出视图,你需要使用 alpha。
  • 使用alpha的另一个“优势”是隐藏视图的子视图仍将显示,而如果您使用hidden属性,它们将被隐藏。
【解决方案4】:

是的,两者的行为相同

唯一的区别是如果你想用动画来隐藏一些东西,比如透明视图。

您可以将它的 alpha 设置为 0.5,而不是在 UIView.animate 中使用 spring 设置它的 aplha 为 0。

其余两个都一样。

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 1970-01-01
    • 2020-03-22
    • 2012-05-08
    • 2015-08-11
    • 2011-04-11
    • 2015-11-05
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多