Название UIButton исчезает после преобразования

У меня странная проблема. У меня есть UIButton с настраиваемым фоном и одним символом в качестве названия. Я хотел бы, чтобы кнопка увеличивалась с анимацией. Анимация работает, однако я больше не вижу название кнопки.

Вот мой код:

UIButton *letterButton = [UIButton buttonWithType:UIButtonTypeCustom];
[letterButton.titleLabel setFont:[UIFont boldSystemFontOfSize:18.0f]];
[letterButton setTitle:[gameManager letterTextForIndex:curIndex] forState:UIControlStateNormal];
letterButton.frame = CGRectMake(curX + kLetterButtonSize / 2, curY + kLetterButtonSize / 2, 0.01f, 0.01f);
[letterButton addTarget:self action:@selector(pressedLetterButton:) forControlEvents:UIControlEventTouchUpInside];

UIImage *buttonImage = [[UIImage imageNamed:@"blueButton.png"]
                                resizableImageWithCapInsets:UIEdgeInsetsMake(18, 18, 18, 18)];
UIImage *buttonImageHighlight = [[UIImage imageNamed:@"blueButtonHighlight.png"]
                                         resizableImageWithCapInsets:UIEdgeInsetsMake(18, 18, 18, 18)];

[letterButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
[letterButton setBackgroundImage:buttonImageHighlight forState:UIControlStateHighlighted];


[self.view addSubview:letterButton];

[UIButton animateWithDuration:0.20f delay:curIndex * 0.17f options:UIViewAnimationOptionTransitionNone animations:^
{
     letterButton.transform = CGAffineTransformMakeScale(kLetterButtonSize / 0.01f, kLetterButtonSize / 0.01f);
}
completion:^(BOOL finished)
{
     [letterButton setTitle:[gameManager letterTextForIndex:curIndex] forState:UIControlStateNormal];
 }];

Как видите, я начинаю с очень маленькой кнопки и со временем увеличиваю ее с помощью преобразования. Я рассчитываю динамически, каков коэффициент масштабирования моей кнопки.

Может ли кто-нибудь объяснить мне, почему заголовок кнопки не виден?


person Devos50    schedule 09.06.2013    source источник
comment
Вы проверили, что letterTextForIndex: что-то возвращает?   -  person yonosoytu    schedule 09.06.2013
comment
Да, я это сделал, он возвращает строку, даже когда я жестко задаю строку в качестве заголовка, это не работает.   -  person Devos50    schedule 09.06.2013


Ответы (1)


Попробуйте наоборот: установите преобразование для начального состояния и «отмените преобразование» для конечного состояния:

UIButton *letterButton = [UIButton buttonWithType:UIButtonTypeCustom];
[letterButton.titleLabel setFont:[UIFont boldSystemFontOfSize:18.0f]];
[letterButton setTitle:[gameManager letterTextForIndex:curIndex]
              forState:UIControlStateNormal];
letterButton.frame = CGRectMake(curX + kLetterButtonSize / 2, curY + kLetterButtonSize / 2, kLetterButtonSize, kLetterButtonSize);
letterButton.transform = CGAffineTransformMakeScale(0.01f/kLetterButtonSize, 0.01f/kLetterButtonSize);
[letterButton addTarget:self
                 action:@selector(pressedLetterButton:)
       forControlEvents:UIControlEventTouchUpInside];

 UIImage *buttonImage = [[UIImage imageNamed:@"blueButton.png"]
                         resizableImageWithCapInsets:UIEdgeInsetsMake(18, 18, 18, 18)];
 UIImage *buttonImageHighlight = [[UIImage imageNamed:@"blueButtonHighlight.png"]
                                  resizableImageWithCapInsets:UIEdgeInsetsMake(18, 18, 18, 18)];

[letterButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
[letterButton setBackgroundImage:buttonImageHighlight forState:UIControlStateHighlighted];


[self.view addSubview:letterButton];

[UIButton animateWithDuration:0.20f delay:curIndex * 0.17f options:UIViewAnimationOptionTransitionNone animations:^
{
    letterButton.transform = CGAffineTransformIdentity;
}
completion:^(BOOL finished)
{
    [letterButton setTitle:[gameManager letterTextForIndex:curIndex] forState:UIControlStateNormal];
}];

Это работает для меня в моем тесте.

Как правило, с момента выхода CAAnimation лучшими результатами для меня всегда были установка конечного состояния анимации и использование обратных преобразований в качестве начального состояния.

person yonosoytu    schedule 09.06.2013
comment
Большое спасибо! Отлично работает, спасибо за ответ :) не видел, что можно и обратную анимацию делать. - person Devos50; 10.06.2013