フリープログラマー日記

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

第14回 分岐のためのエントリーポイント(swift)

現在のビューコントローラーはこんな感じになっています。
ビューをフルサイズにしているのに、センターで位置決めしているのがちょっと不思議な感じですが、フルサイズ以外を選択したときはこの方が都合がいいので、このままにしておきます。

class Entrance: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(_ animated: Bool) {
        
        // 端末のサイズを取得
        // UIScreennクラスが端末サイズを持っている
        let width: CGFloat = UIScreen.main.bounds.size.width
        let height: CGFloat = UIScreen.main.bounds.size.height
        
        // MainMenu のインスタンスを作成。
        let mainMenu:MainMenu = MainMenu(frame: CGRect.zero)
        
                

        // ビューのサイズを設定
        mainMenu.frame = CGRect(x: 0, y: 0, width: width, height: height)
        
        mainMenu.center = CGPoint(x: width/2, y: height/2)
        self.view.addSubview(mainMenu)
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

さて、このままだと、このビューコントローラーから呼べるのはMainMenuクラスだけとなってしまいます。MainMenuから、別のクラスのインスタンスを呼び出すのもいいのかもしれませんが、Entrance.swift(ビューコントローラー)から、色々な画面に飛んでいくのが良さそうなので、改造をしました。

なんだか、一軒家から5部屋のマンションに改造したというイメージではないかと思います。

ご覧ください。

import UIKit

class Entrance: UIViewController {

    private var width: CGFloat = 0.0
    private var height: CGFloat = 0.0
    
 
    override func viewDidLoad() {
        super.viewDidLoad()
        width = UIScreen.main.bounds.size.width
        height = UIScreen.main.bounds.size.height
    }

    override func viewDidAppear(_ animated: Bool) {
        
        showMainMenu()
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    /**************************
     このアプリの構成画面は全部で5個
     それぞれの画面を表示する関数
    **************************/
    
    func showMainMenu() {
        // MainMenu のインスタンスを作成。
        let mainMenu:MainMenu = MainMenu(frame: CGRect.zero)
        // ビューのサイズを設定
        mainMenu.frame = CGRect(x: 0, y: 0, width: width, height: height)
        
        mainMenu.center = CGPoint(x: width/2, y: height/2)
        self.view.addSubview(mainMenu)
    }
    
    
    func showEntry() {
        // 選手登録のためのビュー。
        let entryView:EntryView = EntryView(frame: CGRect.zero)
        // ビューのサイズを設定
        entryView.frame = CGRect(x: 0, y: 0, width: width, height: height)
        
        entryView.center = CGPoint(x: width/2, y: height/2)
        self.view.addSubview(entryView)
    }
    
    
    func showSetting() {
        // 選手登録のためのビュー。
        let settingView:SettingView = SettingView(frame: CGRect.zero)
        // ビューのサイズを設定
        settingView.frame = CGRect(x: 0, y: 0, width: width, height: height)
        
        settingView.center = CGPoint(x: width/2, y: height/2)
        self.view.addSubview(settingView)
    }
    
    func showRun() {
        // 選手登録のためのビュー。
        let runningView:RunningView = RunningView(frame: CGRect.zero)
        // ビューのサイズを設定
        runningView.frame = CGRect(x: 0, y: 0, width: width, height: height)
        
        runningView.center = CGPoint(x: width/2, y: height/2)
        self.view.addSubview(runningView)
    }

    func showRecord() {
        // 選手登録のためのビュー。
        let recordView:RecordView = RecordView(frame: CGRect.zero)
        // ビューのサイズを設定
        recorfView.frame = CGRect(x: 0, y: 0, width: width, height: height)
        
        recordView.center = CGPoint(x: width/2, y: height/2)
        self.view.addSubview(recordView)
    }

}

ビューのサイズをそれぞれ取ってもいいのですが、最初に一回だけサイズを取り、変数に格納しています。こうしておくと、例えばiPAD対応を考えた時、両サイドを切り落とすみたいなことが簡単にできると考えています。

ViewDidAppear の中身は1行になってしまいました。