Ios 为什么将UILabel设置为完全透明会丢失点击手势?
我无法理解这一点,我也不认为这能真正解释这一点 我有一个Ios 为什么将UILabel设置为完全透明会丢失点击手势?,ios,uikit,uigesturerecognizer,uiviewanimation,Ios,Uikit,Uigesturerecognizer,Uiviewanimation,我无法理解这一点,我也不认为这能真正解释这一点 我有一个ui标签,用户可以点击它来隐藏或显示它,设置如下: self.numberLabel.userInteractionEnabled = YES; UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideOrShowNumber)]; [self.numberLabel
ui标签
,用户可以点击它来隐藏或显示它,设置如下:
self.numberLabel.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(hideOrShowNumber)];
[self.numberLabel addGestureRecognizer:tapGesture];
我想通过设置UILabel
上的alpha
值来设置标签隐藏和显示的动画。但是,如果我将alpha值设置为0.0f
,标签将不再接受点击,因此即使用户可以隐藏标签,也无法再显示它
我的解决方法如下:
self.numberLabel.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(hideOrShowNumber)];
[self.numberLabel addGestureRecognizer:tapGesture];
隐藏标签时:
-将alpha值设置为0.0f的动画。
-将标签的文本颜色设置为黑色(由于背景为黑色,因此不可见)
-将alpha重置为1.0f
显示标签时:
-将alpha设置为0.0f(因为隐藏标签时,alpha保持在1.0f)。
-将文本颜色设置为黑色以外的其他颜色(取决于游戏状态)。
-将alpha值设置为1.0f的动画
代码如下所示(包括一些状态变量,但self.numberLabel
是对UILabel
的引用):
它能用,但有点笨重
所以问题是,为什么设置UILabel
的透明度会让它失去用户交互?这是设计的吗?是否有文档记录?我在UIgestureRecognitizer
文档中找不到任何关于此的信息。来自官方(监管触摸事件交付部分)
关闭触摸事件的传递。默认情况下,视图接收
触摸事件,但您可以将其userInteractionEnabled属性设置为
否关闭触摸事件的传递视图也不会收到
如果事件是隐藏的或是透明的,则会显示这些事件
在视图上具有完全透明性(alpha=0)被认为与隐藏视图相似,因此在这种情况下没有必要处理用户交互。您可以尝试使用几乎透明的
UILabel
。α值0.1
似乎是极限值。显然,这种行为曾经被记录在案,但我在当前文档中找不到它
看看这个答案:
默认情况下,视图接收触摸事件,但您可以将其userInteractionEnabled属性设置为“否”以关闭事件传递。如果视图是隐藏的或透明的,则视图也不会接收事件
您隐藏的UILabel
没有理由需要与接收触摸的视图相同。更简单的解决办法是:
似乎任何alpha值小于0.1f的UIView都会将隐藏属性设置为“是”。换句话说,因为您的视图是透明的,所以它不会接收触摸事件。看这个 根据设计,当alpha设置为0时,视图将不会收到触摸。您可以尝试将alpha设置为0.1。检查apple链接。至少在iOS 8中,您可以将alpha设置为0.01(不再是限制0.1),触摸事件将被触发。如果为0.0,则不会触发触摸事件
更新:我发现在iOS 8.2或更早版本中,限制为0.001960785。非常接近完全透明。也许这个数字会更小,我不再保留小数点。我通过创建一个包含空格的UILabel来解决这个问题,然后使用自动布局约束根据需要进行增长/收缩 请看一下Ole Begemann的OBShapedButton——他的代码应该可以帮助您解决这个问题。@rokjarc谢谢,但我有一个解决方法(见上文),另外一个组件在这方面做得太过火了。我对标签很满意,我不需要非矩形按钮。所以这不是一个真正的问题;我在问为什么会这样。就我个人而言,我认为“隐藏”与(完全)“透明”略有不同,但正如许多答案中所指出的,UIKit的想法似乎有所不同。嗨,Jere,我不认为你会使用OBShapedButton而不是标签。我们的想法是看看如何处理这个透明度/触摸问题:使用立方体分类和hitTest。好的,我明白了。是的,这是一个有趣的想法,OB有很多很棒的东西。