UIScrollView

UIScrollViewの設定を書いていきます。
このビューは指定した範囲内でスクロールすることができます。

目次

スクロールする範囲を設定する

UIScrollViewのcontentSizeというプロパティを設定します。

import UIKit

class FirstViewController : UIViewController {
    @IBOutlet var scroll : UIScrollView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        scroll.contentSize = CGSize.init(width: scroll.frame.size.width, height: scroll.frame.size.height * 3)
    }
}

指定した位置までスクロールさせる

やり方は二通りあります。

  • UIScrollViewのcontentOffsetというプロパティを使う。
  • UIScrollViewのsetContentOffsetというメソッドを使う。

この二つは以下のような違いがあります。

contentOffsetを変更する アニメーションなしで指定した位置までスクロールする
setContentOffsetメソッドのanimatedをfalseにする
setContentOffsetメソッドのanimatedをtrueにする アニメーションありで指定した位置までスクロールする

サンプルコード(contentOffsetを使う例)

import UIKit

class FirstViewController : UIViewController {
    @IBOutlet var scroll : UIScrollView!
    var labelArray : [UILabel] = [];
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // スクロールビューのスクロール可能な範囲を設定
        scroll.contentSize = CGSize.init(width: scroll.frame.size.width, height: scroll.frame.size.height * 3)
        
        // ラベルを15個配置し、ラベルを配列に格納する
        for i in 0...15{
            let label : UILabel = UILabel.init(frame: CGRect.init(x: 0, y: i * 100, width: 200, height: 50))
            label.text = "label number \(i)"
            labelArray.append(label)
            scroll.addSubview(label)
        }
    }
    
    // ボタンを押した時に実行される処理
    @IBAction func scroll (sender : Any) {
        // 6番目のラベルの位置までスクロールする
        scroll.contentOffset = CGPoint.init(x: 0, y: (labelArray[5] as UILabel).frame.origin.y)
    }
}

サンプルコード(setContentOffsetメソッドを使ってアニメーションありでスクロールする例)

import UIKit

class FirstViewController : UIViewController {
    @IBOutlet var scroll : UIScrollView!
    var labelArray : [UILabel] = [];
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // スクロールビューのスクロール可能な範囲を設定
        scroll.contentSize = CGSize.init(width: scroll.frame.size.width, height: scroll.frame.size.height * 3)
        
        // ラベルを15個配置し、ラベルを配列に格納する
        for i in 0...15{
            let label : UILabel = UILabel.init(frame: CGRect.init(x: 0, y: i * 100, width: 200, height: 50))
            label.text = "label number \(i)"
            labelArray.append(label)
            scroll.addSubview(label)
        }
    }
    
    // ボタンを押した時に実行される処理
    @IBAction func scroll (sender : Any) {
        // 6番目のラベルの位置までスクロールする
        scroll.setContentOffset(CGPoint.init(x: 0, y: (labelArray[5] as UILabel).frame.origin.y), animated: true)
    }
}