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