使用CADisplayLink的快速自定义动画会导致频闪效果。怎么避免呢?

时间:2012-06-26 14:29:23

标签: ios uiscrollview core-animation

情景:

使用重复使用的页面视图水平滚动UIScrollView(这样只有少数页面视图控制器可以像UITableView单元格一样重复使用)。因此,他们可以使用新内容进行更新并重新使用,我需要知道UIScrollView的内容视图(偏移量)的确切位置。这很有效。

现在我需要实现自定义滚动动画 - 我的意思是以编程方式移动内容视图,以便用户触摸某些按钮,滚动视图使用此自定义动画滚动到所需位置。运动可以非常快速和非常远。我无法使用Core Animation,因为我无法在动画期间跟踪位置(CA报告您只能开始和结束移动)。所以我决定使用 CADisplayLink ,并为每个位置计算每个UIScrollView内容。这也很有效。

唯一的问题是,有时候我会看到频闪效果 - 说我正在将内容向右移动,看起来它正向左移动。如果我使用 setContentOffset:animated:查看UISCrollView中的内置动画,动画会很流畅。有谁知道,如何摆脱这种频闪效应?

1 个答案:

答案 0 :(得分:0)

您的问题很可能是时间戳是double而您将其分配给float

浮动有7位数,而双打有15-16位。

换句话说,您正在经历数据丢失。通过使用double,您应该看到一个柔滑的平滑动画。