我不知道這一點,我不認爲this真的解釋它。爲什麼設置UILabel完全透明會失去輕敲手勢?
我有一個UILabel
可以由用戶加以利用,以隱藏或顯示其上,建立這樣的:
self.numberLabel.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(hideOrShowNumber)];
[self.numberLabel addGestureRecognizer:tapGesture];
我想通過設置alpha
值動畫標籤的隱藏和顯示在UILabel
。但是,如果我將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似乎認爲不同,正如許多答案中指出的那樣。 –
嗨,傑爾,我不認爲你會使用OBShapedButton而不是標籤。這個想法是要看看這個透明/觸摸問題應該如何處理:使用cublassing和使用hitTest。 –