簡體   English   中英

使用UIScrollView進行動畫無限滾動

[英]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];

}

這個答案可能為時已晚。 當我嘗試構建無限滾動視圖時,我也遇到了相同的情況。

我發現的解決方案是:

  1. 要創建一個標志,以指示滾動視圖是否在程序化滾動下,並檢查該標志是否為每個更新。 如果該標志為開,則應丟棄最新記錄。

  2. 使用CADisplayLink以編程方式實現滾動。 如果您希望動畫曲線比線性曲線更多,則可以在此處創建自己的計時功能。

  3. 在每個編程性滾動的結尾,請另外致電“ recenter”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM