【发布时间】:2013-01-05 09:13:23
【问题描述】:
我想不通,我认为this 也没有真正解释它。
我有一个UILabel,用户可以点击它来隐藏或显示它,设置如下:
self.numberLabel.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(hideOrShowNumber)];
[self.numberLabel addGestureRecognizer:tapGesture];
我想通过在UILabel 上设置alpha 值来为标签的隐藏和显示设置动画。但是,如果我将 alpha 值设置为0.0f,标签不再接受点击,所以即使用户可以隐藏标签,她也无法再显示了!
我的解决方法是这样的:
隐藏标签时: - 将 alpha 值设置为 0.0f。 - 将标签的文本颜色设置为黑色(由于背景为黑色,因此使其不可见) - 将 alpha 重置为 1.0f。
显示标签时: - 将 alpha 设置为 0.0f(因为当标签被隐藏时它保持在 1.0f)。 - 将文本颜色设置为黑色以外的其他颜色(取决于游戏状态)。 - 将 alpha 值设置为 1.0f。
代码如下所示(包含一些状态变量,但self.numberLabel是对UILabel的引用):
NSTimeInterval duration = 0.6f;
if (self.numberIsVisible) {
[UIView animateWithDuration:duration
animations:^{
self.numberLabel.alpha = 0.0f;
}
completion:^(BOOL done) {
self.numberLabel.textColor = [UIColor blackColor];
self.numberLabel.alpha = 1.0f;
}
];
self.numberIsVisible = NO;
}
else {
UIColor *rightColor = [UIColor whiteColor];
if ([GameState sharedGameState].haveMatch) {
rightColor = [UIColor colorWithRed:0.0/255.0 green:127.0/255.0 blue:255.0/255.0 alpha:1.0];
}
self.numberLabel.alpha = 0.0f;
self.numberLabel.textColor = rightColor;
[UIView animateWithDuration:duration
animations:^{
self.numberLabel.alpha = 1.0f;
}
];
self.numberIsVisible = YES;
}
它可以工作,但有点笨重。
所以问题是,为什么设置UILabel 的透明度会使其失去用户交互?这是设计使然吗,是否记录在某处?我在 UIGestureRecognizer 文档中找不到任何关于此的内容。
【问题讨论】:
-
看看 Ole Begemann 的 OBShapedButton - 他的代码应该可以帮助您解决这个问题。
-
@rokjarc 谢谢,但我有一个解决方法(见上文),另一个组件对此真的是矫枉过正。我对标签很满意,我不需要非矩形按钮。所以这不是一个真正的问题;我在问为什么会这样。我个人认为“隐藏”与(完全)“透明”略有不同,但 UIKit 似乎认为不同,正如许多答案中所指出的那样。
-
嗨,Jere,我认为您不会使用 OBShapedButton 代替标签。这个想法是看看应该如何处理这个透明度/触摸问题:使用cublasing和使用hitTest。
-
好的,我明白了。是的,这是一个有趣的想法,而且 OB 有很多很棒的东西。
标签: ios uikit uigesturerecognizer uiviewanimation