Iphone 有没有办法通过重用视图在UIScrollView上通过核心动画更改内容偏移?

Iphone 有没有办法通过重用视图在UIScrollView上通过核心动画更改内容偏移?,iphone,ios,cocoa-touch,uiscrollview,core-animation,Iphone,Ios,Cocoa Touch,Uiscrollview,Core Animation,编辑:我取得了一些进展,因此我简化并缩小了问题: 我有非常大的水平滚动UIScrollView,它正在重用它的子视图。当用户向左滚动时,最右边的视图将移动到最左边的位置,并更新其内容。类似地,当用户向右滚动时,最左边的视图将移动到最右边的位置,其内容将更新。类似于UITableView。使用scrollviewDidScroll:delegate方法可以很好地工作 现在我需要以编程方式更改偏移量,但要使用自定义动画行为惯性并反弹到最终位置 我使用 [UIView animateWithDurat

编辑:我取得了一些进展,因此我简化并缩小了问题:

我有非常大的水平滚动UIScrollView,它正在重用它的子视图。当用户向左滚动时,最右边的视图将移动到最左边的位置,并更新其内容。类似地,当用户向右滚动时,最左边的视图将移动到最右边的位置,其内容将更新。类似于UITableView。使用scrollviewDidScroll:delegate方法可以很好地工作

现在我需要以编程方式更改偏移量,但要使用自定义动画行为惯性并反弹到最终位置

我使用

[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:手动,以便重用像往常一样工作,与动画并行。但它根本不起作用-任何东西都不会被重用,动画之后scrollview的内容与动画之前处于相同的状态->以前可见的页面被移出屏幕

因此,问题缩小了如何在动画期间移动子视图并更新其内容的范围


或者可能有完全不同的方法来实现这一点…

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

    [self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>];
然后,当它达到某个特定值时,使其停止

检查我的答案


编辑:哈哈,刚才注意到是同一个作者

我不太明白-所以在动画中视图不会混乱,然后问题是如何移动子视图。。。在动画中。为什么不调用setContentOffset:animated:?然后调用scrollViewDidScroll,您将一如既往地重新定位子视图?是的,但我需要自定义动画。实际上,我已经将UIScrollView子类化,并覆盖setContentOffset:animated:。如果动画是“是”,我需要执行核心动画自定义动画。问题是,在此自定义动画期间,我无法重用子视图。在动画块内执行setContentOffset:animated:时,不会调用viewDidScroll,而是在动画的开头和结尾调用一些其他代理方法,我不希望这样。