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) } }