2011-03-12 83 views
1

我试图实现一个动画,当用户点击我的一个tableview单元格时发生。基本上,动画只是一个带有“+5”或“+1”这样文本的小标签,然后在衰落时向上移动(基本上就像用户评分时在视频游戏中出现的点一样)。动画正在进行时无法与UITableView交互

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交互,就好像动画没有发生一样?

预先感谢任何与此帮助。

回答

5

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

看看在options参数和可能的标记,通过UIViewAnimationOptions定义。其中包括一个名为UIViewAnimationOptionAllowUserInteraction的标志。这可能是一个解决方案,也许你应该尝试一下!

+0

辉煌!那样做了。关于如何以块的方式实现它的好处是块会自动保留来自外部的视图,因此您无需担心在调用完成处理程序之前手动确保临时视图未被销毁。也给你做正式推荐的方式可疑的满意度:) – glenc 2011-03-13 16:00:04

+0

五年后,你仍然保存我的一天。谢谢! – 2016-07-11 08:09:01

1

你试过用另一种方式做它吗?例如,添加吐司作为子视图后,你可以做这样的事情:

[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]; 

然后释放吐司。你可以尝试这种方式,看看它是否有效。

+0

嗨 - 非常感谢这个,这实际上起作用,并给了我所需的行为。我想知道为什么块动画方法不起作用,因为这是现在推荐的做事方式。 – glenc 2011-03-12 17:11:43

+0

真的,现在是推荐的方式吗?我能想到的唯一原因是为什么它不能用于block方法,因为block方法不会创建新线程,而此方法创建一个新线程,并且所有工作都在另一个线程中完成。也许他们将此设置为默认行为,以节省资源,因为大多数人不需要在动画过程中启用交互,对于那些少数人,您可以使用此方法。只是我的猜测。 – Omar 2011-03-12 23:54:44

+0

根据[UIView beginAnimations:context:]的文档,不再推荐这种方法(假设您的应用程序至少需要iOS 4.0):http://developer.apple.com/library/ios/ #documentation/uikit/reference/UIView_Class/UIView/UIView.html#// apple_ref/doc/uid/TP40006816-CH3-SW14 – glenc 2011-03-13 16:02:47