[英]Animated infinite scrolling with UIScrollView
我正在制作動畫無限滾動視圖,並使用了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];
}
這個答案可能為時已晚。 當我嘗試構建無限滾動視圖時,我也遇到了相同的情況。
我發現的解決方案是:
要創建一個標志,以指示滾動視圖是否在程序化滾動下,並檢查該標志是否為每個更新。 如果該標志為開,則應丟棄最新記錄。
使用CADisplayLink以編程方式實現滾動。 如果您希望動畫曲線比線性曲線更多,則可以在此處創建自己的計時功能。
在每個編程性滾動的結尾,請另外致電“ recenter”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.