单元格中的 UITableView 动画导致平滑滚动中断
Posted
技术标签:
【中文标题】单元格中的 UITableView 动画导致平滑滚动中断【英文标题】:UITableView Animation in cell causes smooth scrolling to break 【发布时间】:2011-07-30 17:37:58 【问题描述】:我有一个带有自定义 UITableViewCells 的 UITableView。每个单元格异步加载图像并显示它,这一切都很好,并且表格视图可以完美滚动。
我现在向单元格图像添加了“淡入”动画,但这会破坏表格 滚动。当我轻弹时,只要图像想要“淡入”,tableview 的滚动动画就会停止。几乎就好像单元格图像上新引入的“淡入”中断了滚动动画。
有没有办法绕过这个?这是常见的行为,还是我做了一些非常奇怪的事情?
这是图像异步加载完成后调用的回调函数(动画函数)。
-(void)imageReady:(UIImage *)image FromUrl:(NSString *)url
[UIView animateWithDuration:0.3 animations:^
[self.imageThumbnail setImage:image];
self.imageThumbnail.alpha = 1;
];
我在较早的阶段将 alpha 设置为 0。
感谢所有帮助。
【问题讨论】:
【参考方案1】:就我而言,它只需要 animateWithDuration 调用中的“UIViewAnimationOptionAllowUserInteraction”选项。
[UIView animateWithDuration:0.3 delay:0.0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) animations:^
self.imageThumbnail.alpha = 1;
completion:nil];
【讨论】:
哇,我要花很长时间才能弄清楚这一点。这个选项似乎在 ios 4 中默认禁用,但在 iOS 5 中默认启用。【参考方案2】:由于UITableView
继承自UIScrollView
,我将实现UIScrollViewDelegate
方法,-scrollViewDidScroll:
和-scrollViewDidEndDecelerating:
。此外,我会在您的课程中添加一个 BOOL,例如 shouldPerformAnimations
。
现在在-scrollViewDidScroll
中,将shouldPerformAnimations
设置为NO
。或者在-scrollViewDidEndDecelerating:
中将其设置为YES
现在您所要做的就是在imageReady:fromURL:
中执行动画之前检查shouldPerformAnimations
。这个想法是,如果单元格正在滚动,那么执行用户永远不会看到的动画是没有意义的。因此,通过这样做,我们只需等到 table view 停止滚动,然后我们对所有可见单元格执行动画。您可以使用UITableView
上的-indexPathForVisibleRows
方法获取可见单元格的索引路径数组。
【讨论】:
以上是关于单元格中的 UITableView 动画导致平滑滚动中断的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UITableViewCell 中的 UIButton 导致在多个单元格中选择按钮
如何知道 UITableView 已完成将数据加载到单元格中? [复制]