このセクションでは、SwiftUIの基本的なレイアウトを学びます。
SwiftUIを使うと、簡単にUIを構築できます。
ここでは、複数の要素を配置するためのレイアウトコンテナを使って、
実際にコードを書きながら学んでいきます。
- SwiftUIの基本的なレイアウトを理解する
- VStack, HStack, ZStack の使い方を学ぶ
- 画面に複数の要素を配置する方法を実践する
- SwiftUI の Modifier とは何かを理解する
- Modifier を使ってビューの見た目を変更する方法を学ぶ
- よく使う Modifier の具体的なコード例を実践する
SwiftUI は、Apple が提供する 最新の UI フレームワーク です。
これを使うと、シンプルなコードで美しい iOS アプリ を作成できます。
Link: SwiftUI
特徴 | 説明 |
---|---|
シンプルなコード | 簡潔なコードで UI を作成できる |
リアルタイムプレビュー | コードを変更すると、すぐにプレビューに反映される |
宣言的な UI | 「こう表示したい!」と書くだけで UI を作れる |
すべての Apple プラットフォームで動作 | iPhone, iPad, Mac, Apple Watch などで使える |
💡 例えば、"Hello, SwiftUI!" を表示するには?
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello, SwiftUI!")
}
}
🔽 たったこれだけで、画面にテキストを表示できます!
SwiftUI では、ビュー(View)を組み合わせて画面を作成 します。
基本のビューには、以下のようなものがあります。
ビュー名 | 説明 |
---|---|
Text |
文字を表示する |
Image |
画像を表示する |
Button |
ボタンを作る |
VStack |
縦に並べる |
HStack |
横に並べる |
ZStack |
重ねる |
例えば、次のコードは ボタンをタップすると「こんにちは!」と表示 する例です。
import SwiftUI
struct ContentView: View {
@State private var message = "Hello, SwiftUI!"
var body: some View {
VStack {
Text(message)
.font(.title)
Button("ボタンを押す") {
message = "こんにちは!"
}
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
}
}
}
ボタンを押すと「こんにちは!」に変わる 🎉
SwiftUIでは、画面の要素を並べるために
VStack(垂直)、HStack(水平)、ZStack(重ねる) の3つのレイアウトコンテナを使います。
SampleAppのContentViewを自由に書き換えてSwiftUIでのレイアウトを学んでみよう。
VStack
は、画面の要素を 縦に 並べるためのコンテナです。
struct ContentView: View {
var body: some View {
VStack {
Text("上のテキスト")
Text("下のテキスト")
}
}
}
- VStack の中に
Text()
を2つ配置すると、縦に並ぶ VStack { ... }
の中に複数のビューを入れることで、簡単にレイアウトできる
spacing
を指定すると、要素の間隔を変更できます。
VStack(spacing: 20) {
Text("上のテキスト")
Text("下のテキスト")
}
HStack
は、画面の要素を 横に 並べるためのコンテナです。
struct ContentView: View {
var body: some View {
HStack {
Text("左")
Text("中央")
Text("右")
}
}
}
HStack
を使うと、要素が 水平方向に並ぶVStack
と組み合わせてレイアウトを作ることが多い
spacing
を使って、要素の間隔を調整できます。
HStack(spacing: 30) {
Text("左")
Text("中央")
Text("右")
}
ZStack
は、要素を 重ねる ためのコンテナです。
struct ContentView: View {
var body: some View {
ZStack {
Rectangle()
.fill(Color.blue)
.frame(width: 200, height: 100)
Text("前面のテキスト")
.foregroundColor(.white)
}
}
}
ZStack
の中にあるビューは 上から順に 配置される- 背景とテキスト のように、要素を重ねたいときに使う
alignment
を指定すると、要素を揃えることができる。
ZStack(alignment: .topLeading) {
Rectangle()
.fill(Color.green)
.frame(width: 200, height: 100)
Text("左上")
.foregroundColor(.white)
}
実際のアプリでは、VStack, HStack, ZStack を組み合わせて レイアウトを作ります。
例えば、以下のコードは タイトル、横並びのボタン、背景のあるレイアウト を作る例です。
struct ContentView: View {
var body: some View {
VStack {
Text("タイトル")
.font(.largeTitle)
HStack {
Text("左")
Text("右")
}
.padding()
.background(Color.yellow)
.cornerRadius(10)
ZStack {
Rectangle()
.fill(Color.blue)
.frame(width: 200, height: 100)
Text("前面")
.foregroundColor(.white)
}
}
}
}
SwiftUI では、Modifier(モディファイア) を使ってビューの見た目や動作を変更できます。
Modifier は 背景色の変更、フォントサイズの調整、影の追加、角丸 など、
ビューにさまざまなスタイルや動作を適用するための機能です。
Modifier は、SwiftUI のビューに 追加の設定やスタイルを適用する ための機能です。
💡 Modifier の特徴
- ビューにチェーンのように追加できる
- 元のビューを変更せずに、スタイルや動作を変更できる
- さまざまなビューに適用可能(Text, Image, Rectangle など)
例えば、次のコードでは Text
に複数の Modifier を適用しています。
Text("Hello, SwiftUI!")
.font(.title) // フォントサイズを変更
.foregroundColor(.blue) // テキストの色を青に
.padding() // 内側の余白を追加
.background(Color.yellow) // 背景色を黄色に
.cornerRadius(10) // 背景の角を丸くする
.shadow(color: .gray, radius: 5, x: 2, y: 2) // 影を追加
Text("SwiftUI Modifier")
.font(.largeTitle) // フォントサイズを変更
.foregroundColor(.red) // テキストの色を赤に
Text("文字間隔を調整")
.kerning(5) // 文字間隔を広げる
Text("行間を調整\nこれは2行目")
.lineSpacing(10) // 行間を広げる
Text("影をつける")
.shadow(color: .gray, radius: 5, x: 2, y: 2)
Image(systemName: "star.fill")
.resizable() // サイズ変更可能に
.frame(width: 50, height: 50) // サイズを指定
Image(systemName: "star.fill")
.foregroundColor(.orange) // 星の色をオレンジに
Image(systemName: "star.fill")
.shadow(color: .gray, radius: 5, x: 2, y: 2)
Rectangle()
.fill(Color.green) // 塗りつぶし色
.frame(width: 100, height: 50)
.cornerRadius(10) // 角を丸くする
Circle()
.stroke(Color.red, lineWidth: 4) // 赤い枠線
.frame(width: 100, height: 100)
Button(action: {
print("ボタンが押されました")
}) {
Text("ボタンを押してね")
.font(.headline)
.foregroundColor(.white)
.padding()
.background(Color.blue)
.cornerRadius(10)
.shadow(color: .gray, radius: 5, x: 2, y: 2)
}
Slider(value: $sliderValue, in: 0...1)
.padding()
.accentColor(.green) // スライダーの色
Toggle("トグルスイッチ", isOn: $toggleValue)
.toggleStyle(SwitchToggleStyle(tint: .green))
import SwiftUI
struct ContentView: View {
@State private var sliderValue: Double = 0.5
@State private var toggleValue: Bool = true
var body: some View {
Slider(value: $sliderValue, in: 0...1)
.padding()
.accentColor(.green)
Toggle("トグルスイッチ", isOn: $toggleValue)
.toggleStyle(SwitchToggleStyle(tint: .green))
}
}
#Preview {
ContentView()
}
Text("Opacity Example")
.opacity(0.5) // 半透明にする
Text("Rotated Text")
.rotationEffect(.degrees(45)) // 45度回転
Text("Scaled Text")
.scaleEffect(1.5) // 1.5倍に拡大
Text("背景つき")
.padding()
.background(RoundedRectangle(cornerRadius: 10).fill(Color.green))
Rectangle()
.fill(Color.blue)
.frame(width: 150, height: 100)
.overlay(
Text("Overlay")
.foregroundColor(.white)
.font(.headline)
)
VStack
,HStack
,ZStack
を 組み合わせることで、自由にレイアウトが作れる- SwiftUI の Modifier を使うと、ビューの見た目や動作を簡単に変更できる
Modifier | 役割 |
---|---|
.font(.title) |
フォントサイズを変更 |
.foregroundColor(.red) |
テキストの色を変更 |
.padding() |
余白を追加 |
.background(Color.yellow) |
背景色をつける |
.cornerRadius(10) |
角を丸くする |
.shadow(color: .gray, radius: 5, x: 2, y: 2) |
影をつける |
.opacity(0.5) |
透明度を変更 |
.rotationEffect(.degrees(45)) |
回転する |
.scaleEffect(1.5) |
拡大・縮小する |
次のステップでは、実際にコードを書いてレイアウトを組む課題に挑戦します。