SwiftでcontentOffsetが2ポイントの間にある場合(下の図を参照)、プログラムでscrollviewのcontentOffsetを設定したいと思います。
問題は、移動のためのスムーズな移行を追加したいのですが、これに関するドキュメントが見つかりませんでした。コンテンツオフセットを徐々に減らすためにループを実行しようとしましたが、結果はあまり良くありません。
この例では、スクロールの最後でコンテンツオフセットが150ピクセル未満の場合、オフセットが100に等しいポイントまでスムーズに移動します(アニメーションの期間は1秒になります)。最大150ピクセルで、 200ピクセルまで。
あなたが私に何をすべきかの指示(ドキュメントまたは簡単な例)を提供できるなら、それは素晴らしいことです:)ありがとう!
UIView.animations
を使用できます
func goToPoint() {
dispatch_async(dispatch_get_main_queue()) {
UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: {
self.scrollView.contentOffset.x = 200
}, completion: nil)
}
}
以下はSwift 3バージョンのfatihyildizhanのコードです。
DispatchQueue.main.async {
UIView.animate(withDuration: 0.2, delay: 0, options: UIViewAnimationOptions.curveEaseOut, animations: {
self.myScrollView.contentOffset.x = CGFloat(startingPointForView)
}, completion: nil)
}
これで、面倒なアニメーションブロックを呼び出す前の回避策の代わりに、メソッドsetContentOffset(_ contentOffset: CGPoint, animated: Bool)
を単に呼び出すことができます。見る:
x = CGFloat(startingPointForView)
myScrollView.setContentOffset(CGPoint(x: x, y: 0), animated: true)
それが役に立てば幸い。
Swift 4:
DispatchQueue.main.async {
UIView.animate(withDuration: 1, delay: 0, options: UIView.AnimationOptions.curveLinear, animations: {
self.scrollView.contentOffset.x = 200
}, completion: nil)
}