使用willTransitionToState在uitableviewcell中为textlabel设置动画

Nic*_*ico 6 iphone

当我按下编辑按钮时,我试图在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];
 }
}
Run Code Online (Sandbox Code Playgroud)

Ada*_* S. 12

我注意到在输入willTransitionToState时动画被禁用了.以下修正了它.

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

    //Should be enabled by default...but apparently not
    [UIView setAnimationsEnabled:YES];
...
}
Run Code Online (Sandbox Code Playgroud)

  • 您不知道为什么他们可能禁用了动画,因此您可能希望在动画块之前保存+ [UIView areAnimationsEnabled]返回的值,并在方法结束时恢复该值. (3认同)

小智 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];
    }
}
Run Code Online (Sandbox Code Playgroud)