2016-11-26 53 views
2

我有一個UIScrollView裏面有一些標籤。我可以用一個按鈕將滾動視圖移動到另一個'頁面'。但是當我推得太快時,抵消是不正確的。UIScrollView setContentOffset不正確

我的代碼,以滾動視圖移動到下一個頁面:

@IBAction func moveToRight(_ sender: Any) { 
    let size = Int(scrView.contentOffset.x) + Int(scrView.frame.size.width); 
    scrView.setContentOffset(CGPoint(x: size, y: 0), animated: true) 
} 

偏移是不正確的,當我推得太快了。它看起來像當前動畫停止,並將從當前(未完成)位置執行下一個動畫。

有沒有人有這方面的解決方案?

回答

2

我沒有時間去測試,但我認爲你對這個問題的主要原因是正確的。由於animated設置爲true,我的猜測是contentOffset.x尚未設置爲其最終值,直到動畫結束。

爲什麼你不改變你的邏輯有點並創建記住在您最後一次滾動當前頁面的屬性:

var currentPage: Int = 0 

然後每次向右移動時,如果有可能增加當前頁碼:

@IBAction func moveToRight(_ sender: Any) { 
    let maxX = scrollView.contentSize.x - scrollView.frame.width 
    let newX = CGFloat(currentPage + 1) * scrollView.frame.width 
    if newX <= maxX { 
    currentPage = currentPage + 1 
    scrollView.setContentOffset(CGPoint(x: newX, y: 0), animated: true) 
    } 
} 
+0

謝謝!這項工作就像一個魅力! – da1lbi3

相關問題