xyz-log.
トップへ戻る
Tech / 2026.01.07 2026.01.07 / 4 分 ...

完全に理解する Storyboard & UIKit (Day 19): Custom Viewの作成とStoryboardでの利用(@IBDesignable, @IBInspectable)

S7r1n9y

S7r1n9y

Engineer

完全に理解する Storyboard & UIKit
19 / 30
このシリーズの記事一覧
  1. 1. 完全に理解する Storyboard & UIKit (Day 1): 基礎概念と歴史
  2. 2. 完全に理解する Storyboard & UIKit (Day 2): XcodeでのStoryboardの基本操作
  3. 3. 完全に理解する Storyboard & UIKit (Day 3): UIViewControllerのライフサイクル
  4. 4. 完全に理解する Storyboard & UIKit (Day 4): Auto Layoutの基本原理
  5. 5. 完全に理解する Storyboard & UIKit (Day 5): Auto Layoutの複雑な制約の解決
  6. 6. 完全に理解する Storyboard & UIKit (Day 6): UIStackViewを使った効率的なレイアウト設計
  7. 7. 完全に理解する Storyboard & UIKit (Day 7): Size Classesによるレスポンシブデザイン
  8. 8. 完全に理解する Storyboard & UIKit (Day 8): Segueによる画面遷移とデータ渡し
  9. 9. 完全に理解する Storyboard & UIKit (Day 9): Navigation Controllerの活用
  10. 10. 完全に理解する Storyboard & UIKit (Day 10): Tab Bar Controllerの活用
  11. 11. 完全に理解する Storyboard & UIKit (Day 11): 基本的なUI部品(UILabel, UIButton, UITextField)
  12. 12. 完全に理解する Storyboard & UIKit (Day 12): UITextViewとキーボードハンドリング
  13. 13. 完全に理解する Storyboard & UIKit (Day 13): UIImageViewと画像リソース管理
  14. 14. 完全に理解する Storyboard & UIKit (Day 14): UIScrollViewとコンテンツのスクロール
  15. 15. 完全に理解する Storyboard & UIKit (Day 15): UITableViewの実装基礎
  16. 16. 完全に理解する Storyboard & UIKit (Day 16): UITableViewのカスタムセル作成
  17. 17. 完全に理解する Storyboard & UIKit (Day 17): UICollectionViewの実装基礎
  18. 18. 完全に理解する Storyboard & UIKit (Day 18): UICollectionViewのカスタムレイアウト
  19. 19. 完全に理解する Storyboard & UIKit (Day 19): Custom Viewの作成とStoryboardでの利用(@IBDesignable, @IBInspectable)
  20. 20. 完全に理解する Storyboard & UIKit (Day 20): アニメーションの実装(UIView Animation)
  21. 21. 完全に理解する Storyboard & UIKit (Day 21): Gesture Recognizerによるタッチ処理
  22. 22. 完全に理解する Storyboard & UIKit (Day 22): UIAlertControllerによるアラートとアクションシート
  23. 23. 完全に理解する Storyboard & UIKit (Day 23): UIDatePickerやUIPickerViewの実装
  24. 24. 完全に理解する Storyboard & UIKit (Day 24): Storyboard Referenceを用いたStoryboard分割
  25. 25. 完全に理解する Storyboard & UIKit (Day 25): XIBとStoryboardの使い分け・併用
  26. 26. 完全に理解する Storyboard & UIKit (Day 26): UIAppearanceによるアプリ全体の色・スタイル管理
  27. 27. 完全に理解する Storyboard & UIKit (Day 27): ダークモード対応とアセットカタログ
  28. 28. 完全に理解する Storyboard & UIKit (Day 28): Accessibility(VoiceOver対応など)のUI設計
  29. 29. 完全に理解する Storyboard & UIKit (Day 29): UIKitからSwiftUIへの移行 / UIKitでのSwiftUI利用
  30. 30. 完全に理解する Storyboard & UIKit (Day 30): 実践:1つのアプリをStoryboardとUIKitで完成させる
完全に理解する Storyboard & UIKit (Day 19): Custom Viewの作成とStoryboardでの利用(@IBDesignable, @IBInspectable)

Sponsored

完全に理解する Storyboard & UIKit (Day 19): Custom Viewの作成とStoryboardでの利用

第5部に入ります。ここではよりインタラクティブで高度なUI表現を学びます。 まずは既存のUI部品(UIButton等)を使うのではなく、自分独自の機能や装飾を持った再利用可能なコンポーネント(Custom View)を実装する方法を解説します。


1. Custom Viewの基本実装

「枠線と角丸がつき、グラデーション背景を持つ特別なビュー」を色々な画面で使い回したいとします。 画面ごとに毎回コードを書くのではなく、UIView を継承した独自のクラスを作ります。

swift
import UIKit // @IBDesignableをつけると、Storyboard上でこのViewの描画がリアルタイムでレンダリングされます @IBDesignable class RoundedCardView: UIView { // コードから初期化された時によばれる override init(frame: CGRect) { super.init(frame: frame) setupView() } // Storyboard/XIBから初期化された時によばれる required init?(coder: NSCoder) { super.init(coder: coder) setupView() } // 共通の初期設定 private func setupView() { // 角を丸める self.layer.cornerRadius = 16 // 影をつける self.layer.shadowColor = UIColor.black.cgColor self.layer.shadowOpacity = 0.2 self.layer.shadowOffset = CGSize(width: 0, height: 4) self.layer.shadowRadius = 8 } }

Custom Viewの適用

  1. Storyboardを開き、キャンバスにただの UIView を配置します。
  2. 配置したViewを選択し、Identity Inspector (⌥⌘3) を開きます。
  3. Class に、先ほど作成した RoundedCardView を入力します。

2. @IBDesignable の魔法

上記のコードでクラス名の前に付けた @IBDesignable というアノテーションは、非常に強力な機能です。

通常、カスタムビューに追加した角丸や影などの layer の変更は、アプリをビルドしてシミュレータで動かさないと確認できません。しかし @IBDesignable を宣言しておくと、Xcodeが裏側でこのクラスだけをコンパイルし、Storyboardのキャンバス上に実際の影や角丸が付いた状態をリアルタイムで描画・プレビューしてくれます。

これにより、ビルド&ランの待ち時間を劇的に削減できます。


3. @IBInspectable でパラメータを公開する

自作ビューの「角丸の大きさ」や「枠線の色」を、コードを書き換えずにStoryboardの Attributes Inspector (⌥⌘4) からポチポチと変更できたら便利ですよね。 それを実現するのが @IBInspectable です。

先ほどのクラスにプロパティを追加してみましょう。

swift
@IBDesignable class RoundedCardView: UIView { // @IBInspectableをつけることで、Storyboardのインスペクタに表示される @IBInspectable var cornerRadius: CGFloat = 16 { didSet { // Storyboard上で値が変更されたら、即座にレイヤーに反映させる self.layer.cornerRadius = cornerRadius } } @IBInspectable var shadowOpacity: Float = 0.2 { didSet { self.layer.shadowOpacity = shadowOpacity } } @IBInspectable var borderColor: UIColor = UIColor.clear { didSet { self.layer.borderColor = borderColor.cgColor } } @IBInspectable var borderWidth: CGFloat = 0 { didSet { self.layer.borderWidth = borderWidth } } // init等は省略 ... }

Storyboardでの確認

Storyboard内でこのViewを選択し、Attributes Inspector を見てください。 上部に自作の項目(Corner Radius, Shadow Opacity, Border Color 等)を持った専用のセクションが出現しているはずです。 ここで数値を変更すると、didSet が走り、@IBDesignable の力によってキャンバス上の表示グラフが即座に変化します。

デザイナーと協業する際や、汎用的なコンポーネントライブラリを作る際にこのテクニックは絶大な威力を発揮します。


📝 今日のまとめ

  • UIView を継承したクラスを作成し、init(frame:)init(coder:) の両方を実装することでカスタムビューを作成する。
  • @IBDesignable をクラスに付与すると、Storyboard上でカスタム描画がリアルタイムで実行・プレビューされる。
  • @IBInspectable を変数(プロパティ)に付与すると、Attributes InspectorのGUIから直接パラメータを編集できるようになる。
  • 変更をリアルタイム反映させるために、プロパティの監視メソッド didSet の中でUIの更新処理を記述する。

自作の美しいコンポーネントを作れるようになりました。しかし、UIがピタッと止まったままでは面白みがありません。 明日の Day 20 では、UIKitにおける「アニメーション(UIView Animation)」の基礎を学び、アプリに滑らかな動き(モーション)を取り入れます。

END OF FILE
この記事は役に立ちましたか?
SNSでシェアする
後で読む(ブックマーク)
完全に理解する Storyboard & UIKit
19 / 30
このシリーズの記事一覧
  1. 1. 完全に理解する Storyboard & UIKit (Day 1): 基礎概念と歴史
  2. 2. 完全に理解する Storyboard & UIKit (Day 2): XcodeでのStoryboardの基本操作
  3. 3. 完全に理解する Storyboard & UIKit (Day 3): UIViewControllerのライフサイクル
  4. 4. 完全に理解する Storyboard & UIKit (Day 4): Auto Layoutの基本原理
  5. 5. 完全に理解する Storyboard & UIKit (Day 5): Auto Layoutの複雑な制約の解決
  6. 6. 完全に理解する Storyboard & UIKit (Day 6): UIStackViewを使った効率的なレイアウト設計
  7. 7. 完全に理解する Storyboard & UIKit (Day 7): Size Classesによるレスポンシブデザイン
  8. 8. 完全に理解する Storyboard & UIKit (Day 8): Segueによる画面遷移とデータ渡し
  9. 9. 完全に理解する Storyboard & UIKit (Day 9): Navigation Controllerの活用
  10. 10. 完全に理解する Storyboard & UIKit (Day 10): Tab Bar Controllerの活用
  11. 11. 完全に理解する Storyboard & UIKit (Day 11): 基本的なUI部品(UILabel, UIButton, UITextField)
  12. 12. 完全に理解する Storyboard & UIKit (Day 12): UITextViewとキーボードハンドリング
  13. 13. 完全に理解する Storyboard & UIKit (Day 13): UIImageViewと画像リソース管理
  14. 14. 完全に理解する Storyboard & UIKit (Day 14): UIScrollViewとコンテンツのスクロール
  15. 15. 完全に理解する Storyboard & UIKit (Day 15): UITableViewの実装基礎
  16. 16. 完全に理解する Storyboard & UIKit (Day 16): UITableViewのカスタムセル作成
  17. 17. 完全に理解する Storyboard & UIKit (Day 17): UICollectionViewの実装基礎
  18. 18. 完全に理解する Storyboard & UIKit (Day 18): UICollectionViewのカスタムレイアウト
  19. 19. 完全に理解する Storyboard & UIKit (Day 19): Custom Viewの作成とStoryboardでの利用(@IBDesignable, @IBInspectable)
  20. 20. 完全に理解する Storyboard & UIKit (Day 20): アニメーションの実装(UIView Animation)
  21. 21. 完全に理解する Storyboard & UIKit (Day 21): Gesture Recognizerによるタッチ処理
  22. 22. 完全に理解する Storyboard & UIKit (Day 22): UIAlertControllerによるアラートとアクションシート
  23. 23. 完全に理解する Storyboard & UIKit (Day 23): UIDatePickerやUIPickerViewの実装
  24. 24. 完全に理解する Storyboard & UIKit (Day 24): Storyboard Referenceを用いたStoryboard分割
  25. 25. 完全に理解する Storyboard & UIKit (Day 25): XIBとStoryboardの使い分け・併用
  26. 26. 完全に理解する Storyboard & UIKit (Day 26): UIAppearanceによるアプリ全体の色・スタイル管理
  27. 27. 完全に理解する Storyboard & UIKit (Day 27): ダークモード対応とアセットカタログ
  28. 28. 完全に理解する Storyboard & UIKit (Day 28): Accessibility(VoiceOver対応など)のUI設計
  29. 29. 完全に理解する Storyboard & UIKit (Day 29): UIKitからSwiftUIへの移行 / UIKitでのSwiftUI利用
  30. 30. 完全に理解する Storyboard & UIKit (Day 30): 実践:1つのアプリをStoryboardとUIKitで完成させる
Related Articles