2010-11-23 4 views
6

편집 버튼을 누르면 UItableviewcell에서 텍스트 라벨에 애니메이션을 적용하려고합니다. 페이드 아웃하고 페이드 인하려고합니다. 페이드 인이 작동하지만 '편집'을 누르면 텍스트 라벨이 사라지고 '완료'버튼을 누르면 나는 완벽하게 페이드 인합니다.willTransitionToState를 사용하여 uitableviewcell에서 textlabel을 움직입니다.

아무도 왜 작동하지 않는지 말할 수 있습니까? 모든 것을에서 미리

- (void)willTransitionToState:(UITableViewCellStateMask)state { 
[super willTransitionToState:state]; 

if ((state & UITableViewCellStateEditingMask) || (state & UITableViewCellStateShowingDeleteConfirmationMask)) { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    label.alpha = 0.0; 
    [UIView commitAnimations]; 
} 
} 

- (void)didTransitionToState:(UITableViewCellStateMask)state { 
[super didTransitionToState:state]; 

if (!(state & UITableViewCellStateEditingMask) && !(state & UITableViewCellStateShowingDeleteConfirmationMask)) { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.5]; 
    label.alpha = 1.0; 
    [UIView commitAnimations]; 
} 
} 

답변

6

에서

덕분에 나는 내가 willTransitionToState 갈 방법이었다 확실히 생각 읽었다. 정상적인 편집 전환이 끝난 후에 전환이 시작되지만 didTransitionToState를 사용하면 완벽하게 작동합니다. 그것이 나오는 것에 따라

난 당신이 setEditing

- (void)setEditing:(BOOL)editing animated:(BOOL)animate 
{ 
    [super setEditing:editing animated:animate]; 

    if(editing) { 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:0.3]; 
     label.alpha = 0.0; 
     [UIView commitAnimations]; 
    } else { 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:0.3]; 
     label.alpha = 1.0; 
     [UIView commitAnimations]; 
    } 
} 
+1

+1도 MonoTouch에서 작동합니다. – tomfanning

12

내가 willTransitionToState를 입력 할 때 애니메이션이 비활성화 된 것으로 나타났습니다을 사용하려는 생각합니다. 다음은 그것을 고쳤다.

- (void)willTransitionToState:(UITableViewCellStateMask)state 
{ 
    [super willTransitionToState:state]; 

    //Should be enabled by default...but apparently not 
    [UIView setAnimationsEnabled:YES]; 
... 
} 
+3

애니메이션이 비활성화 된 이유를 알 수 없으므로 애니메이션 블록 앞에 + [UIView areAnimationsEnabled]에 의해 반환 된 값을 저장하고 메소드 끝에서 값을 복원 할 수 있습니다. – Alej

관련 문제