我正在制作动画无限滚动视图,我使用了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];
}
答案 0 :(得分:0)
这个答案可能为时已晚。当我尝试构建无限滚动视图时,我也遇到了同样的情况。
我找到的解决方案是:
创建一个标志,指示滚动视图是否在程序化滚动下,并检查每个重新标记的标记。如果该标志打开,则应丢弃重新定位。
使用CADisplayLink以编程方式实现滚动。如果您希望动画曲线超过线性,则可以在此处制作自己的计时功能。
在每个程序滚动结束时,另外调用重新定位。