2014-01-15 2 views
1

Interface Builder에서 액션에 연결되는 "시작"텍스트가있는 시작 버튼이 있습니다.animationWithDuration을 사용하여 UIButton의 제목을 변경하면 지연이나 애니메이션이 발생하지 않습니다.

그러나 애니메이션은 3 + 5 초가 아닌 즉시 시작되고 완료됩니다. 이 코드의 문제점은 무엇입니까?

@interface ViewController() 
@property (weak, nonatomic) IBOutlet UIButton *startButton; 
@end 

@implementation ViewController 

- (IBAction)startPressed:(UIButton *)sender 
{ 
    [UIView animateWithDuration:3 delay:5 
     options:UIViewAnimationOptionCurveEaseInOut 
     animations:^{ 
      [self.startButton setTitle:@"New Title" forState:UIControlStateNormal]; 
     } 
     completion:nil]; 
} 

@end 

업데이트 : 물론, 이러한 응답은 정확합니다. 텍스트를 숨기지 않고 Jack Wu의 제안을 사용했지만 setTitle을 사용하면 화면에 버튼이 다시 깜박입니다.

- (IBAction)startPressed:(UIButton *)sender 
{ 
    [UIView animateWithDuration:1.5 delay:5 
     options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ self.startButton.alpha = 0; } 
        completion:^(BOOL c){ if (c) { 
     self.startButton.hidden = YES; 
     [self.startButton setTitle:@"newTitle" forState:UIControlStateNormal]; 
     [UIView animateWithDuration:1.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
         animations:^{ 
          self.startButton.hidden = NO; 
          self.startButton.alpha = 1; 
         } 
         completion:nil]; 

    }}]; 
} 
+0

버튼의 제목이 애니메이션 가능합니까? – Caleb

+0

여기에 당신이 무엇을 기대하고 있는지 확실하지 않습니다 ... – Jack

+0

전환의 일종을 원한다면 1.5 초 내에 버튼을 페이드 아웃시키고 텍스트를 변경 한 다음 다시 1.5 초로 페이드 아웃 할 수 있습니까? – Jack

답변

4

단추의 제목은 애니메이션 가능한 속성이 아니므로 즉시 반환 할 것입니다. 그건 의도적으로입니다. UIView의 애니메이션 가능한 속성은 'documentation'에서 찾을 수 있습니다. 그들이 오늘날 무엇을하고 있는지 알아보십시오.

@property frame 
@property bounds 
@property center 
@property transform 
@property alpha 
@property backgroundColor 
@property contentStretch 

다른 방법으로는, 당신은 당신의 버튼에 두 개의 하위 뷰 레이블을 추가 할 수 있으며 크로스는 애니메이션을 페이드.

1

제목은 UIButton의 애니메이션 속성이 아닙니다. 다른 사람들이 제안했듯이, 버튼을 페이드 아웃하거나, 제목을 변경하거나, 페이드 백하거나하는 등의 작업을 직접 수행하여 애니메이션을 만들어야합니다.

단추의 비트 맵 스냅 샷을 찍고 현재 단추 위에 놓고 비트 맵 스냅 샷 아래에서 단추 제목을 변경 한 다음 비트 맵을 페이드 아웃하고 제거하는 사용자 지정 애니메이션 코드를 작성할 수도 있습니다. 그러면 크로스 페이드 효과를 얻을 수 있지만 상당한 양의 작업이 될 것입니다.

관련 문제