問題
scrollView
に大きさの違うViewを設定すると、ページ遷移の際に表示されるViewがずれる不具合が発生します。
したいこと
一回目のスクロールで第二ページが画面の真ん中に表示され、
二回目のスクロールで第三ページ目が表示されるようにしたいです。
試したこと
・delegateを用いてスクロールイベントを検知し、scroll.isScrollEnabled = false
で自動にスクロールされるのを停止し、その後に自らViewをanimationで移動させてみました。 -> 本来のscrollViewのようなめらかなスクロールアニメーションを実装できませんでした。
・UISwipeGestureRecognizer
を用いて、スワイプを検知しViewを移動させてみました -> こちらもなめらかなViewの動きを実装できませんでした。
質問したいこと
・scrollの遷移先を細かく設定することはできますか?
サンプルコード
Swift
1 2//UIViewContoroller内に記述 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 6 let scrollView = UIScrollView() 7 var subView: UIView? 8 var subViewWidth = UIScreen.main.bounds.width*3/4 9 let scrollViewWidth = UIScreen.main.bounds.width 10 let scrollViewContentWidth = subViewWidth*8/3 11 let frameHeight = UIScreen.main.bounds.height 12 let frameWidth = UIScreen.main.bounds.width 13 var width: CGFloat? 14 var x: CGFloat = 0 15 16 scrollView.backgroundColor = .brown 17 scrollView.isPagingEnabled = true 18 scrollView.showsHorizontalScrollIndicator = false 19 scrollView.frame = CGRect( 20 x: 0, 21 y: 0, 22 width: frameWidth, 23 height: frameHeight 24 ) 25 scrollView.contentSize = CGSize( 26 width: scrollViewContentWidth, 27 height: frameHeight 28 ) 29 self.view.addSubview(scrollView) 30 31 for i in 0 ..< 3 { 32 if i == 0 { 33 subView = UIView() 34 subView!.backgroundColor = .red 35 width = subViewWidth 36 } else if i == 1 { 37 subView = UIView() 38 subView!.backgroundColor = .blue 39 x += subViewWidth 40 width = subViewWidth*2/3 41 } else { 42 subView = UIView() 43 subView!.backgroundColor = .green 44 x += subViewWidth*2/3 45 width = subViewWidth 46 } 47 subView!.frame = CGRect( 48 x: x, 49 y: 0, 50 width: width!, 51 height: frameHeight 52 ) 53 scrollView.addSubview(subView!) 54 } 55 }
何卒よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。