编辑:我取得了一些进展,所以我简化并缩小了问题:我创建了新问题,我希望它更清晰,更容易理解
我有非常大的水平滚动 UIScrollView,它正在重用它的子视图。当用户向左滚动时,最右边的视图移动到最左边的位置并更新其内容。同样,当用户向右滚动时,最左边的视图会移动到最右边的位置并更新其内容。与 UITableView 类似。使用 scrollviewDidScroll: 委托方法可以很好地工作。
现在我需要以编程方式更改偏移量,但要使用自定义动画行为(惯性和弹回最终位置)。
为了对此进行原型制作,我使用
[UIView animateWithDuration:contentOffsetCADuration
delay:0
options:UIViewAnimationOptionCurveLinear
animations:^{
[self setContentOffsetNoDelegateCalls:contentOffset animated:NO];
}
completion:^(BOOL finish){
dispatch_async(dispatch_get_main_queue(), ^{
[timer invalidate];
});
}];
我使用禁用的委托回调对内容偏移进行动画处理,以便在动画期间不会弄乱视图。但我需要一些东西来同时重用和重新定位它们。
我的解决方案是创建计时器并scrollViewDidScroll:
手动调用,以便像往常一样重用,与动画并行。但它根本不起作用 - 没有任何东西被重用,并且动画之后的滚动视图的内容与动画之前的状态相同 -> 以前可见的页面被移出屏幕。
所以问题缩小了如何在动画期间移动子视图和更新它们的内容?
或者也许有完全不同的方式来做到这一点......