Является ли UILabel backgroundColor анимированным? - PullRequest
3 голосов
/ 22 июня 2011

У меня есть gridView, я использую для отображения несколько GridViewCell : UIView. GidViewCell добавляет UILabel к себе и прикрепляет UITapGestureRecognizer к себе.

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[self addGestureRecognizer:gestureRecognizer];
[gestureRecognizer release];

в tapped: Я хочу воспроизвести анимацию, в том числе изменить цвет фона метки

- (void) tapped:(id)sender {
    [UIView animateWithDuration:1.0
                          delay:0
                        options:(UIViewAnimationOptionAllowUserInteraction)
                     animations:^{ 
                         [(UILabel *)[[self subviews] objectAtIndex:0] setBackgroundColor:[UIColor blueColor]];
                     }  
                     completion:^(BOOL finished){
                         [(UILabel *)[[self subviews] objectAtIndex:0] setBackgroundColor:[UIColor whiteColor]];
                     }
     ];     
[self.delegate didSelectGridViewCell:self];
}

Но метка просто мигает синим на мгновение - если вообще. Если я использую тот же код, но настраиваю альфа метки вместо цвета фона, все работает как положено.

Документы Apple перечисляют backgroundColor как анимируемое. Это так? Я что-то не так делаю?

1 Ответ

11 голосов
/ 22 июня 2011

Я никогда не пробовал это сам, но знаю кого-то, у кого есть. Я не знаю, если это ошибка в документации или в коде. Я предполагаю последнее, поскольку UILabel наследуется от UIView, и я точно знаю, что вы можете анимировать фон UIView. Обходной путь, по-видимому, состоит в том, чтобы развернуть базовый CALayer и установить там цвет фона.

...