カテゴリー
iOS Swift

UIViewの理解のために

UIViewはUIを構成する基本的なビルディング・ブロックで、ひとつ以上のsubviewを持つことが出来ます。また、UIResponderのサブクラスであり、touchやその他のeventに反応することが出来たり、gesture recognizerを設定することが出来ます。

UIViewControllerのviewプロパティはRoot Viewを保持します。viewプロパティの初期値はnilです。view == nilの時にviewを呼び出すと、UIViewControllerにより自動的にloadView()メソッドが呼ばれます。

boundsとframeの違いについて

boundsは、自身のcoordinate system(0, 0)にrelativeな位置(x, y)とサイズ(width, height)で表されるrectangleです。

frameは、自身のsuperviewにrelativeな位置(x, y)とサイズ(width, height)で表されるrectangleです。

override func viewDidAppear(_ animated: Bool) {
    print(view.bounds)      // CGRect(x: y: width: height:)がプリントされる
    print(view.bounds.size) // CGSize(width: height:)がプリントされる
    print(view.frame)       // CGRect(x: y: width: height:)がプリントされる
  print(view.frame.size)  // CGSize(width: height:)がプリントされる
}
// this method happens after all the layouts has been done. このメソッドは全てのレイアウト後に呼ばれる
override func layoutSubviews() {
    super.layoutSubviews()
    let layer = sampleImageView.layer
    layer.cornerRadius = 30
}