はじめに
Swiftに関してはまだ学習段階で、StoryBoardを使わずにUIを構築してみたいと思い調べてみました。
ドンピシャな記事がこちらだったのですが、Swift4には対応しておらず、諸々でエラーが出たので、そちらのバグを修正したものを書いていこうかと思います。
なお、こちらの記事を書いている @lovee さんには多大な感謝を申し上げますm(_ _)m
進め方として、@lovee さんの記事を参照して進め、エラーが出た際にこの記事と見比べていただければと思います。
MainView.swift
import UIKit
class MainView: UIView {
// ラベルのクラスを宣言
let mainLabel: UILabel
override init(frame: CGRect) {
// MainViewのフレームサイズを定数に代入
let mainViewFrame = frame
// labelのサイズを設定
let mainLabelSize = CGSize(width:240, height:30)
// MainViewのフレームサイズとラベルのサイズからラベルがちょうど中央に来るように場所を計算する
let mainLabelOrigin = CGPoint(
x:(mainViewFrame.width - mainLabelSize.width) / 2,
y:(mainViewFrame.height - mainLabelSize.height) / 2
)
// ラベルのフレームを定数に設定しておく
let mainLabelFrame = CGRect(x: mainLabelOrigin.x, y: mainLabelOrigin.y, width: mainLabelSize.width, height: mainLabelSize.height)
// mainLabelを作る
mainLabel = UILabel(frame: mainLabelFrame)
// mainLabelの表示テキストを設定
mainLabel.text = "Change to Text"
// mainLabelの表示テキストのセンタリングを設定
mainLabel.textAlignment = .center
// mainLabelの設定が終わったので、親クラスを初期化
super.init(frame: frame)
// MainView クラスの背景色を白に設定
self.backgroundColor = UIColor.white
// MainViewにmainLabelを表示させる
self.addSubview(mainLabel)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let mainView = MainView(frame: UIScreen.main.bounds)
self.view.addSubview(mainView)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// アプリウィンドウの設定
self.window = UIWindow(frame: UIScreen.main.bounds)
// ウィンドウをヴィジブルにする
self.window?.makeKeyAndVisible()
// ウィンドウのrootViewControllerをviewControllerに設定する
self.window?.rootViewController = viewController
return true
}
// 以下省略
}