UIScrollView setContentOffset不对

时间:2016-11-26 13:30:47

标签: swift uiscrollview

我有一个UIScrollView,里面有一些标签。我可以使用按钮将滚动视图移动到另一个“页面”。但是当我把它推得太快时,偏移是不对的。

我将滚动视图移动到下一页的代码:

@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)
}

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

有人有解决方案吗?

1 个答案:

答案 0 :(得分:6)

我没有时间进行测试,但我认为您正在探讨问题的主要原因。由于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)
  }
}