2011-08-28 118 views
2

我有一个UITableView与自定义UITableViewCells在它。这些细胞可以用动画打开和关闭。当用户滚动时,我想关闭单元格。我这样做,通过发布这样的通知:滚动时UITableViewCell动画

[[NSNotificationCenter defaultCenter] postNotificationName:@"closeSwipedCell" object:nil]; 

这将调用哪个做我的简单的动画在我的UITableViewCell子类的方法。这工作正常,但动画不会发生,直到用户停止再次滚动UITableView。 滚动表格视图时可以做这个动画吗?

+0

我知道,例如,如果在单元格中加载了一些图片的UIWebView,然后当表格视图滚动时,即使图片已经加载,图片也不会出现。 – Nekto

+1

你为什么使用通知?你是否试图直接从滚动视图委托(UITableView是一个UIScrollView子类)调用单元格动画方法?考虑通知不是立即发送,而是为下一个运行循环合并,所以可能是在滚动期间没有消息发送,然后这解释了动画的延迟。这只是一个猜测 – viggio24

+0

通知可能不是最优雅的解决方案,但它似乎最简单,因为我必须存储活动单元格并在滚动时调用该单元格以避免使用通知。看起来,通知是在细胞开始动画时马上发送的。打开时,单元格将向右滑动(有点像Tweetie/Twitter),然后在关闭它时会做一些反弹动画。它确实关闭了,但是如果我不进行滚动就调用该方法(例如再次滑动单元格),它会执行小动作。 – simonbs

回答

2

下面是如何对单元子菜单进行滑动的详细说明,例如twitter iphone应用。我认为这与你的需求非常相似。它不使用通知来关闭单元格,而是使用来自UIScrollViewDelegate的事件,如其他评论者所推荐的。

iDevRecipes 查找idevrecipes.com上的一篇文章,名为“Twitter iPhone应用程序如何在桌面上实现侧滑动”。

有很好的描述,但也有代码下载。

+0

这是比我的更好的实现方式。我甚至没有想过使用UITableView来检测滑动等等。相反,我正在检测UITableViewCell的子类上的滑动。这很麻烦。非常感谢你。 – simonbs

0

您应该可以听取UIScrollViewDelegate方法scrollViewDidScroll:然后开始您的活动。

查看Apple docs on UIScrollViewDelegate

编辑:如果我不清楚,UITableViewDelegate符合UISCrollViewDelegate

+0

这就是我现在正在做的事情。当我的表格视图关闭时,它会创建一个“反弹效果”。我通过将UITableViewCell子类中的子视图向后和向后滑动几次来实现这种效果,但这种情况在用户停止滚动之前不会发生。 – simonbs

0

scrollViewDidScroll:只能在用户滚动结束时调用。您可能想尝试使用scrollViewWillBeginDragging:委托方法来启动您的通知,该方法在滚动操作开始时肯定会被调用。

还有几个UIViewAnimationOptions常量(IIRC,UIViewAnimationOptionBeginFromCurrentState是我正在考虑的那个)影响动画是否在另一个动画动作期间开始,如滚动(跟踪)。

您需要OR该选项以及动画方法调用的options:参数中的现有动画选项。