0

编辑:我取得了一些进展,所以我简化并缩小了问题:我创建了新问题,我希望它更清晰,更容易理解


我有非常大的水平滚动 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:手动调用,以便像往常一样重用,与动画并行。但它根本不起作用 - 没有任何东西被重用,并且动画之后的滚动视图的内容与动画之前的状态相同 -> 以前可见的页面被移出屏幕。

所以问题缩小了如何在动画期间移动子视图和更新它们的内容?

或者也许有完全不同的方式来做到这一点......

4

2 回答 2

1

在这里检查我的答案。

编辑:大声笑,刚刚注意到它是同一作者

于 2012-04-18T13:07:19.587 回答
-1

您可以尝试在方法中更改滚动偏移量,然后您可以从中调用它

    [self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>];

然后让它在达到特定值时停止

于 2012-04-17T14:09:22.617 回答