UIView属性hidden = YES vs alpha = 0.0f

时间:2015-04-28 12:42:28

标签: ios uiview uikit

对于这些案例,我一直在寻找答案和一种“最佳实践”,因为对于任何试图处理用户界面和显然是UIKit的开发人员来说,它们必须经常发生。

我已经阅读了this thread和其他众多网站而没有找到一个好的答案

我要问的是,当选择隐藏视图而不必为其设置动画时,性能的差异是什么(我知道两种属性在更改时视觉效果的差异)

从实用的角度来看,我觉得只要你不想动画任何东西,只设置隐藏属性而不关心alpha会更聪明。另一方面,如果性能完全没有差异,为什么要将属性添加到UIView类?

在一些评论和问题中,当hidden值为alpha时,人们说0.0f属性为真,但经过一些调试后我发现事实并非如此,它们似乎完全分离,没有任何逻辑方式连接

修改

我想强调一点,我理解性能上的差异不会太大,但我仍然想知道,这就是问题。 与使用情况无关。这已经在很多页面以及stackoverflow上得到了解决。

2 个答案:

答案 0 :(得分:2)

虽然我无法说出表演差异(如果有的话,它必然非常小)我想谈谈你的最后一点。

  

另一方面,如果性能完全没有差异,为什么要将属性添加到UIView类?

如果对它们进行相同处理,则可能只是使代码更清晰。如果你想隐藏一个视图,你会期望有一个隐藏的视图。属性,当阅读代码(或搜索大型代码库以查找隐藏的视图)时,您将自然地寻找隐藏属性,而不是alpha属性。

答案 1 :(得分:1)

hidden不同,alpha是一个可动画的属性。基本上,这意味着您没有直接设置值,而是在调用setAlpha:时,动画被添加到处理alpha更改的视图中。

这就是为什么像以下这样的事情总是起作用的原因之一:

CGFloat alpha = 0.5f;
[view setAlpha:alpha];
CGFloat alpha2 = view.alpha; //not 0.5f!

这意味着,将hidden设置为NO始终优先于将alpha设置为0.0。尽管性能差异不明显,但设置alpha仍然比仅使用hidden复杂得多。

如果要隐藏视图,请使用hidden,如果要更改透明度(或为其设置动画),请使用alpha

编辑:

许多程序员使用alpha优先于hidden的偏好可能与通常用动画显示和隐藏视图的事实有关。仅使用alpha可以简化代码,因为您不必一次设置两个变量:

//showing a view
view.hidden = NO;
view.alpha = 0.0f;

[UIView animateWithDuration:0.3 animations: ^{
   view.alpha = 1.0f;
}];

//hiding a view
[UIView animateWithDuration:0.3 animations: ^{
   view.alpha = 0.0f;
} completion:^(BOOL finished) {
   view.alpha = 1.0f;
   view.hidden = YES;
}];

如果您忽略hidden并仅使用alpha隐藏视图,则可以简化上述代码。