2013-06-09 6 views
0

У меня странная проблема. У меня есть 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]; 
}]; 

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

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

+0

Вы проверили, что 'letterTextForIndex:' что-то возвращает? – yonosoytu

+0

Да, я сделал, он возвращает строку, даже когда я жестко задаю строку как заголовок, она не работает. – Devos50

ответ

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, лучшие результаты для меня всегда задавали конечное состояние анимации и использовали обратные преобразования как начальное состояние.

+0

Спасибо большое! Он отлично работает, спасибо за ответ :) не видел, что также можно сделать обратную анимацию. – Devos50

Смежные вопросы