2016-11-26 3 views
2

内部にいくつかのラベルがあるUIScrollViewがあります。私はボタンで他の 'ページ'にスクロールビューを移動することができます。しかし、あまりにも速く押すとオフセットが正しくない。UIScrollView setContentOffsetが正しくありません

次のページにscrollviewを移動するための私のコードは:私は速すぎて、それを押すと

@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

私はテストする時間がありませんが、あなたが問題の主な理由について正しい道筋にいると思います。 animatedtrueに設定されているため、私の推測では、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

関連する問題