UIScrollView setContentOffset不正确

问题描述:

我有一个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) 
} 

偏移是不正确的,当我推得太快了。它看起来像当前动画停止,并将从当前(未完成)位置执行下一个动画。

有没有人有这方面的解决方案?

我没有时间去测试,但我认为你对这个问题的主要原因是正确的。由于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