【Swift】ScrollViewでページングを実装

こんにちは、@nekokichi1_yos2です。

 

ScrollViewでページ送りのアニメーションを実装する場合、下記のコードを打つか、

scrollView.isPagingEnabled = true

インスペクタの"Paging Enabled"にチェックを入れます。

f:id:nekokichi_yos2:20200314115340p:plain

 

初期設定のScrollView

↓ 

 

 

PagingEnabledが可能になったScrollView

 

ただ、ページングを実装する際に注意点があります。

 

”1度のページングでScrollViewの大きさだけ移動させる”なら、ScrollViewで実装するUIViewの幅(もしくは高さ)は

  • ScrollView.frame.size.width(もしくはheight) x ○(数字)

にする必要があります。

 

もしScrollViewのサイズで割り切れないサイズを設定すれば、下記のように中途半端な幅が余ってしまいます。

(iPhone8のシミュレータ(幅375)で実装。UIViewの幅を1200に設定)

 

仮に各ページ(ページング後のScrollView)の中央にUI部品を設置する際、ScrolViewのサイズに合わせた方が、

  • ScrollViewの幅 / 2 - (UI部品の幅 / 2)
  • ScrollViewの高さ / 2- (UI部品の高さ / 2)

のように調整しやすくなります。

 

なので、1度のスワイプでScrollViewをページングするなら、UIViewをScrollView x 数字のサイズにした方がいいでしょう。 

 

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var scrollView1: UIScrollView!
    
    var vc1 = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //ScrollView上に要素を配置
        horizontalScroll()
        //ScrollViewのページングを可に
        scrollView1.isPagingEnabled = true
    }
    
    //横スクロール
    func horizontalScroll() {
        vc1.frame = CGRect(x: 0, y: 0, width: scrollView1.frame.size.width * 6, height: scrollView1.frame.size.height)
        for i in 0...6 {
            let button = UIButton()
            button.frame = CGRect(x: (i*200), y: 30, width: 80, height: 55)
            button.setTitle("\(i)", for: .normal)
            button.setTitleColor(.white, for: .normal)
            button.layer.borderWidth = 1
            vc1.addSubview(button)
        }
        scrollView1.addSubview(vc1)
        scrollView1.contentSize = vc1.bounds.size
    }