我有一个带有自定义UITableViewCells的UITableView。每个单元格异步加载图像并显示它,这一切都很好,表格视图完美滚动。
我现在已经为单元格图像添加了“淡入”动画,但这会破坏表格 滚动。当我轻弹时,一旦图像想要“淡入”,桌面视图的滚动动画就会停止。几乎就好像在单元格图像上新引入的“淡入”会中断滚动动画。
有没有办法绕过这个?是这种常见的行为,还是我设法做了一些非常奇怪的事情?
这是在异步加载图像(动画函数)后调用的回调函数。
-(void)imageReady:(UIImage *)image FromUrl:(NSString *)url
{
[UIView animateWithDuration:0.3 animations:^
{
[self.imageThumbnail setImage:image];
self.imageThumbnail.alpha = 1;
}];
}
我在较早阶段将alpha设置为0。
所有帮助表示赞赏。
答案 0 :(得分:5)
就我而言,它所需要的只是animateWithDuration调用中的“UIViewAnimationOptionAllowUserInteraction”选项。
[UIView animateWithDuration:0.3 delay:0.0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) animations:^
{
self.imageThumbnail.alpha = 1;
} completion:nil];
答案 1 :(得分:1)
由于UITableView
来自UIScrollView
,我会实施UIScrollViewDelegate
方法,-scrollViewDidScroll:
和-scrollViewDidEndDecelerating:
。另外,我会在您的课程中添加BOOL,例如shouldPerformAnimations
。
现在在-scrollViewDidScroll
,将shouldPerformAnimations
设置为NO
。或者将其设置为YES
-scrollViewDidEndDecelerating:
现在,您需要做的就是在shouldPerformAnimations
中执行动画之前检查imageReady:fromURL:
。我们的想法是,如果单元格滚动,则执行用户永远不会看到的动画是没有意义的。所以通过这样做我们只是等到表视图停止滚动,然后我们在所有可见单元格上执行动画。您可以使用-indexPathForVisibleRows
上的UITableView
方法获取可见单元格的索引路径数组。