使用UIScrollView动画无限滚动

时间:2012-10-13 20:15:33

标签: ios animation uiscrollview infinite

我正在制作动画无限滚动视图,我使用了Apple的StreetScroller示例。我正在使用NSTimer(1秒间隔)添加一个动画,调用1秒动画,我正在设置滚动视图的内容偏移(大约40个像素)。它工作得很完美,但是当调用方法recenterIfNecessary基本上重置了滚动视图的contentOffset时会出现问题,但这也是动画的,所以它看起来像是滚动视图“展开”回到中心然后恢复动画。 我猜我应该取消动画,但是我不确定如何。

使用NSTimer调用的代码:

- (void)performScroll {
    CGFloat currentOffset = self.horizontal ? self.contentOffset.x : self.contentOffset.y;
    CGFloat newOffset = currentOffset + self.kActualPixelsPerSecond;
    CGPoint offsetPoint;
    if (self.horizontal)
        offsetPoint = CGPointMake(newOffset, 0.0);
    else
        offsetPoint = CGPointMake(0.0, newOffset);

    [UIView animateWithDuration:kScrollingTimeInterval
                          delay:0
                        options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                                [self setContentOffset:offsetPoint animated:NO];
                     } completion:nil];

}

1 个答案:

答案 0 :(得分:0)

这个答案可能为时已晚。当我尝试构建无限滚动视图时,我也遇到了同样的情况。

我找到的解决方案是:

  1. 创建一个标志,指示滚动视图是否在程序化滚动下,并检查每个重新标记的标记。如果该标志打开,则应丢弃重新定位。

  2. 使用CADisplayLink以编程方式实现滚动。如果您希望动画曲线超过线性,则可以在此处制作自己的计时功能。

  3. 在每个程序滚动结束时,另外调用重新定位。