2013-06-09 2 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

관련 문제