动画正在进行时无法与UITableView交互

时间:2011-03-12 15:51:52

标签: iphone animation uitableview

我正在尝试实现当用户点击我的一个tableview单元格时发生的动画。基本上,动画只是一个带有“+5”或“+1”等文字的小标签,然后在褪色的同时向上移动(基本上就像用户对它们进行评分时在视频游戏中出现的点)。

在我的控制器的tableView:didSelectRowAtIndexPath:实现中,我正在执行以下操作(这里为了简单起见):

CGRect toastFrame = /* figure out the frame from the cell frame here */;
UILabel *toast = [[UILabel alloc] initWithFrame:toastFrame];
toast.text = [NSString stringWithFormat:@"+%d", 5];
toast.backgroundColor = [UIColor clearColor];
toast.userInteractionEnabled = NO; // hoped this would work but it doesn't
[tableView addSubview:toast];

[UIView
 animateWithDuration:1.0
 animations:^
 {
     toast.alpha = 0.0;
     toast.transform = CGAffineTransformMakeTranslation( 0.0, -44.0 );
 }
 completion:^ (BOOL finished)
 {
     [toast removeFromSuperview];
 }];

[toast release];

吐司很好看,看起来很棒。问题是,在动画完成之前,tableview会停止接收触摸事件。这意味着在点击tableview中的单元格后一秒钟,您无法点击tableview中的任何其他单元格。

有没有办法阻止这种情况发生,并允许用户继续与tableview进行交互,就像动画根本没有发生一样?

提前感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:6)

另一种选择可能是使用animateWithDuration:delay:options:animations:completion:(未经测试,从我的头脑中)

查看options参数以及UIViewAnimationOptions定义的可能标记。包括一个名为UIViewAnimationOptionAllowUserInteraction的旗帜。这个可能是一个解决方案,也许你应该尝试一下!

答案 1 :(得分:1)

您是否尝试过其他方式?例如,在添加toast作为子视图后,您可以执行以下操作:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve: UIViewAnimationCurveEaseOut];
[UIView setAnimationDuration: 1.0];
toast.alpha = 0.0;
toast.frame.origin.y -= 44.0;
[toast performSelector:@selector(removeFromSuperview) withObject: nil afterDelay: 1.0];
[UIView commitAnimations];

然后释放吐司。你可以这样试试,看它是否有效。