私はこれを理解することはできませんし、これが本当にそれを説明しているとは思いません。
UILabel
ユーザーがタップして非表示または表示できる があります。次のように設定します。
self.numberLabel.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(hideOrShowNumber)];
[self.numberLabel addGestureRecognizer:tapGesture];
alpha
に値を設定して、ラベルの非表示と表示をアニメーション化したいと思いUILabel
ます。ただし、アルファ値を に設定する0.0f
と、ラベルはタップを受け入れなくなります。そのため、ユーザーがラベルを非表示にできたとしても、表示できなくなります。
私の回避策は次のようになります。
ラベルを非表示にする場合: - アルファ値を 0.0f にアニメートします。- ラベルのテキストの色を黒に設定します (背景が黒なので見えなくなります)。 - アルファを 1.0f にリセットします。
ラベルを表示する場合: - アルファを 0.0f に設定します (ラベルが非表示のときに 1.0f のままだったため)。- テキストの色を黒以外の色に設定します (ゲームの状態によって異なります)。- アルファ値を 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
ドキュメントでこれについて何も見つかりません。