[技巧]UIView的hidden和alpha的妙用

首先说一下hidden和alpha属性的作用:(摘自王中周博客

一、alpha
        液晶显示器是由一个个的像素点组成的,每个像素点都可以显示一个由RGBA颜色空间组成的一种色值。其中的A就表示透明度alpha,UIView中alpha是一个浮点值,取值范围0~1.0,表示从完全透明到完全不透明。
当把alpha的值设置成0以后:
1、当前的UIView和subview都会被隐藏,而不管subview的alpha值为多少。
2、当前UIView会从响应者链中移除,而响应者链中的下一个会成为第一响应者
alpha的默认值是1.0。
另外,更改alpha值时,默认是有动画效果的,这是因为图层在Cocoa中是由Core Animation中CALayer表示的,该动画效果是CALayer的隐含动画。当然也有办法禁用此动画效果,在这就不多述了,感兴趣的同学可以继续关注后续的博客。
二、hidden
        该属性为BOOL值,用来表示UIView是否隐藏,默认值是NO。
当值设为YES时:
1、当前的UIView和subview都会被隐藏,而不管subview的hidden值为多少。
2、当前UIView会从响应者链中移除,而响应者链中的下一个会成为第一响应者
总之,同alpha为0时的显示效果相同。那么我们可以利用这两个相似的属性做一些特殊的事情。比如:视频播放器正中间,有暂停按钮、loading视图两个控件。这两个控件有同时出现的情况比如:如何解决互斥出现呢?


现状:暂停和loading都是通过hidden来实现显示和隐藏的。这两个的显示有各自的逻辑。暂停按钮显示5秒消失。loading图根据网络状况出现,消失。

解决原则是:loading视图要比暂停优先级高,即loading会踢走暂停按钮,loading消失,暂停还需要出现(如果有的话)。那么,既然无法控制hidden,我们可以利用另外一个属性alpha。这样即便alpha=1,也不影响视图的显示结果。写一个伪代码:

loading出现。
暂停按钮.alpha = 0.0 
loading 消失
暂停按钮.alpha = 1.0 
/*无外乎两种情况*/
if(暂停按钮.hidden == yes){
    之前暂停按钮是隐藏。这里既是alpha是1也不影响其隐藏
}else{
    之前暂停按钮是显示。这里alpha=1 还原之前的显示。
}

实现后效果




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值