2010-11-23 5 views
6

J'essaye d'animer l'étiquette de texte dans un UItableviewcell quand j'appuie sur le bouton d'édition. J'essaye de le faire disparaître et de fondre. S'éclipsant dans les œuvres, mais quand j'appuie sur 'edit', l'étiquette disparaît et quand j'appuie sur 'done', je me faufile parfaitement. Est-ce que quelqu'un peut me dire pourquoi cela ne fonctionne pas?animer textlabel dans uitableviewcell en utilisant willTransitionToState

merci à l'avance

- (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]; 
} 
} 

Répondre

6

De tout ce que j'avais lu je pensais pour que le willTransitionToState était le chemin à parcourir. Cela fonctionne même parfaitement si vous utilisez didTransitionToState bien que la transition commence après la fin de la transition d'édition normale.

Il se trouve que je pense que vous voulez utiliser 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 fonctionne également avec MonoTouch. – tomfanning

12

J'ai remarqué que lors de l'entrée willTransitionToState que les animations ont été désactivées. Ce qui suit l'a corrigé.

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

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

Vous ne savez pas pourquoi les animations peuvent être désactivées. Vous pouvez donc enregistrer la valeur renvoyée par + [UIView areAnimationsEnabled] avant votre bloc d'animation et restaurer la valeur à la fin de la méthode. – Alej

Questions connexes