概要
UIの定義がViewControllerに沢山書いてあると可読性が下がるので、UIを別のクラスに定義してViewControllerではaddSubviewするだけにしようと思いました。ViewControllerに書かれる行数が減って楽です。今回は、外部のクラス(.swiftのファイル)に定義したUISlider
をViewControllerに呼び出して使いたいと思います。
説明
大まかな処理の流れはこんな感じ。まずclass UISliderStartEnd
を定義して、class UISliderStartEnd
の中にUISlider
を引数として返す関数func makeSliderStartEnd
を作ります。
ViewController内ではクラスをインスタンス化して使えるようにします。そのあとにaddSubview
の引数でインスタンス化したクラスの関数を実行します。返り値がUISliderを返すのでaddSubview
することができます
実装
UISliderStartEnd.swift
UISliderStartEnd.swift
import Foundation
import UIKit
class UISliderStartEnd:UIViewController{
func makeSliderStartEnd() -> UISlider {
// スライダー
let startPointSlider = UISlider(frame: CGRect(x:0, y:0, width:350, height:30))
startPointSlider.layer.position = CGPoint(x:self.view.frame.midX, y:500)
startPointSlider.backgroundColor = UIColor.white
startPointSlider.layer.cornerRadius = 10.0
startPointSlider.layer.shadowOpacity = 0.5
startPointSlider.layer.masksToBounds = false
startPointSlider.addTarget(self, action: #selector(self.onStartPointlabel(_:)), for: .valueChanged)
// 最小値と最大値を設定する.
startPointSlider.minimumValue = 0
startPointSlider.maximumValue = 100
return startPointSlider
}
/*
Sliderの値が変わった時に呼ばれるメソッド
*/
@objc func onStartPointlabel(_ sender:UISlider!)
{
print(sender.value)
}
}
ViewController.swift
ViewController.swift
//クラスをインスタンス化
var UISliderStartEndInstance = UISliderStartEnd()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(UISliderStartEndInstance.makeSliderStartEnd())
}
注意点
下記のように、インスタンス変数を作る手間を端折って下記のように直接アクセスすると、Actionメソッドが動かないので、しっかりインスタンス変数は作りましょう。
self.view.addSubview(UISliderStartEnd().makeSliderStartEnd())