フリープログラマー日記

iOS,アンドロイド開発を気ままにしながら生きてるおじさんのブログです。

第29回 Static が便利だった!

 今まであんまり使ったことのない static キーワード。何かカウントするときとか便利だよ〜とかって、それくらいの知識だけで。
 でも、これって、インスタンス作らんでも使えるやんってことで、ビューを作る情報が散乱してるのを集めてみることにしました。

import UIKit

class MySettings  {
    
    // このクラスにはいろいろなビューのサイズを保管する
    static var width: CGFloat = 0
    static var height: CGFloat = 0
    static var sizeRetio: CGFloat = 0.24 // 縦横の比 横を100に固定
    
    // エントリー用のCGSizeを返す
    static func runnerEntryViewSize() -> CGSize {
        let w = width * 0.4
        let h = w * sizeRetio
        return CGSize(width: w, height: h)
    }
    
    static func runnerErentryViewWidth() -> CGFloat {
        return runnerEntryViewSize().width
    }
    
    static func runnerErentryViewHeight() -> CGFloat {
        return runnerEntryViewSize().height
    }
    
    // エントリービューのフレーム、とりあえず、全画面
    static func entryViewFrame() -> CGRect {
        return CGRect(x: 0, y: 0, width: width, height: height)
    }
    
    // エントリー用のCGRectを返す.スクロールビューでの座標
    static func runnerEntryViewFrame(num: Int) -> CGRect {
        // 引数num によって縦位置が変わる。
        let o: CGPoint = CGPoint(x: 0, y: runnerErentryViewHeight() * CGFloat(num-1))
        return CGRect(origin: o, size: runnerEntryViewSize())
    }
    
    // エントリー用スクロールビューのframe これは見える部分
    static func entryScrollViewFrame() -> CGRect{
        let frame: CGRect = CGRect(x: width*0.5, y: width*0.15, width: width*0.4, height: height - width * 0.4)
        return frame
    }
    
    // エントリー用スクロールビューのContentSize 中身のサイズ
    static func entryViewContentSize(num: Int) -> CGSize {
        let size: CGSize = CGSize(width: runnerErentryViewWidth(), height: runnerErentryViewHeight() * CGFloat(num))
        return size
    }
}

名前が長い目ですが、後で利用することを考えるとわかりやすい方がいいのかなと。

で、使う方は、こんな感じです。

    // 自前のイニシャライザ
    init(number: Int, name: String) {
        myNumber = number
        myName = name
        super.init(frame: MySettings.runnerEntryViewFrame(num: number))
        setBackGroundColor()
    }

    private func setBackGroundColor() {
        // 背景色をセット、エントリー時には色を変える 色は未調整
        if entry {
            backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 30/255, alpha: 255/255)
        } else {
            backgroundColor = UIColor(red: 200/255, green: 200/255, blue: 200/255, alpha: 255/255)
        }
    }

 デザインを変えたい時には、MySettings.swiftだけいじれば良いのでとても楽になりました。でも、これって、プログラムの世界じゃ常識なのかもしれない・・・(未熟だったな〜)

今回は、static変数、static関数を用いて、プログラムを見やすくしようということでした。

MySettingsの中身をいじるだけで、ビューの位置を自由に変えられるようになりました。

f:id:momonga117:20180527113641p:plain