view.alpha = 0 vs view.hidden = YES有什么影响?

时间:2011-02-28 20:03:21

标签: ios cocoa-touch transparency

透明度是邪恶的,在iOS设备上甚至比在更重的机器上更加邪恶。因此,我想先使用view removeFromSuperView,如果不适用view.hidden=YES,则作为最后的手段使用view.alpha=0。但实际上我不知道幕后发生了什么。是否存在差异,尤其是后两者之间的差异?

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

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

4 个答案:

答案 0 :(得分:64)

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

  

隐藏视图

     

要以视觉方式隐藏视图,可以将其隐藏属性设置为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值要求图形硬件将对象中的每个像素与下面的所有内容混合在一起。这是计算密集型的。另一方面,隐藏标志是一个开关。如果你打开它,操作系统就知道它根本不必绘制对象。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

是的,两者的行为相同

唯一的区别是,您是否想用动画来隐藏某些东西,例如透明视图。

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

其余两个都一样。