1
我正在制作动画无限滚动视图,并使用了Apple的StreetScroller样本。我使用NSTimer(1秒间隔)添加一个动画,调用1秒钟的动画,在其中设置滚动视图的内容偏移量(大约40像素)。它可以很好地工作,但是当调用方法recenterIfNecessary
时会出现问题,它基本上重置了scrollview的contentOffset
,但也是动画的,所以看起来就像scrollview被“展开”回到中心,然后恢复动画。 我想我应该取消动画时,我正在重新审核,但我不知道如何。它被调用,的NSTimer使用UIScrollView进行动画无限滚动
代码:
- (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];
}
尝试在performScroll中调用recenterIfNecessary而不在layoutSubviews – Felix
尝试过但发生同样的事情。我也尝试过在完成块中,但事情是动画从未真正完成,因为计时器持续时间和动画持续时间是相同的。如果我不把它放在'if(finished)'块中,它也会放松回到中心。 如果我将动画持续时间设置为小于NSTimer的间隔0.01秒,但我不喜欢该解决方案,那么我可以将它完美地运行。 – Jure