2017-01-05 6 views
1

ページングを有効にして水平にスクロールするUIScrollViewがあります。スクロールビューのページングを変更してスクロールビューの全長の半分にスナップする方法はありますか?私は何を探しているかを示す写真を追加しました。UIScrollViewのカスタムページング

Page 1

Page 2

Page 3

override func viewDidLoad() { 
    super.viewDidLoad() 


let scrollView = UIScrollView() 
scrollView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height) 
scrollView.contentSize = CGSize(width: self.view.frame.size.width * 2, height: self.view.frame.size.height) 
scrollView.isPagingEnabled = true 
self.view.addSubview(scrollView) 

let view1 = UIView() 
view1.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width/2, height: self.view.frame.size.height) 
view1.backgroundColor = UIColor.purple 
scrollView.addSubview(view1) 

let view2 = UIView() 
view2.frame = CGRect(x: self.view.frame.size.width/2, y: 0, width: self.view.frame.size.width/2, height: self.view.frame.size.height) 
view2.backgroundColor = UIColor.green 
scrollView.addSubview(view2) 

let view3 = UIView() 
view3.frame = CGRect(x: self.view.frame.size.width, y: 0, width: self.view.frame.size.width/2, height: self.view.frame.size.height) 
view3.backgroundColor = UIColor.yellow 
scrollView.addSubview(view3) 

let view4 = UIView() 
view4.frame = CGRect(x: self.view.frame.size.width + self.view.frame.size.width/2, y: 0, width: self.view.frame.size.width/2, height: self.view.frame.size.height) 
view4.backgroundColor = UIColor.red 
scrollView.addSubview(view4) 

} 
+0

さらに詳しい説明をしてコードを表示してください –

+0

私はスクロールビューの中に画面全体と4つのビューをカバーするスクロールビューを持っています。これらの4つのサブビューのそれぞれは、画面幅の半分の幅を持ちます。私はこのスクロールビューを次のサブビュー(画面幅の半分)にスナップするようにしたいと思います。私は自分のコードと一緒にビデオを添付して、私がすでに構築したことを示します。 –

+0

ビデオは次のとおりです:https://drive.google.com/file/d/0B6E9tiTyLokuRmVjelRmVWgzbHc/view?usp=sharing –

答えて

0

あなたはscrollViewのためのデリゲートを設定し、UIScrollViewDelegateのいずれかの方法を実装することができます。

func scrollViewWillEndDragging(
    _ scrollView: UIScrollView, 
    withVelocity velocity: CGPoint, 
    targetContentOffset: UnsafeMutablePointer<CGPoint> 
) 

あなたはする必要があります双生児をするこの呼び出しを受け取ったときにはカスタムロジックを使用できません。具体的には、targetContentOffsetvelocityを調べて、scrollViewの停止位置とユーザーがドラッグしている方向を確認します。次に、targetContentOffsetを実際に停止する新しい場所に変更します。

新しい場合、targetContentOffsetxの値は、偶数ページの倍数になります。明らかに、ページ数が奇数の場合は、最後のページオフセットを考慮して、少し異なるものを実行する必要があります。

カスタム動作がデフォルトのページング動作と競合するため、デフォルトのUIScrollViewページングを無効にして、すべてのページングを処理する必要があります。

+0

ありがとう!私はこれを試してみる –

関連する問題