コインを作る
今回はアプリ中央にあるText("やる")
の背面にView
を配置する方法でコインのような見た目を作っていきます。
Viewの背面にViewを配置する
Viewの背面にView
を配置するには、.backgroound
モディファイアを使用します。まずは試しに背面に色を設定してみましょう。
次のようにText("やる")
に.background
モディファイアを追加します。
VStack(spacing: 32) { Text("やる") // ↓ここを追加 .background { Color.yellow } Text("コインを投げる") }
文字の背面が黄色になっているのが確認できます。
今回使用しているColor
は、前回に文字色を指定したものと一緒です。このColor
はView
としても扱うことができます。
少し文字が小さいので、このText
も.font(.largeTitle)
にしておきましょう。
VStack(spacing: 32) { Text("やる") // ↓ここを追加 .font(.largeTitle) .background { Color.yellow } Text("コインを投げる") }
Text
が大きくなり、それに伴って背面の色も大きくなっているのが確認できます。
フレームの大きさを指定する
背面に色を配置することはできましたが、これがコインのような形になったとしても少し大きさが小さすぎる気がします。そこで.frame
モディファイアを使用します。このモディファイアはView
の高さや幅に対して大きさを指定できるもので、今回はText("やる")
の高さと幅の大きさを指定します。
次のようにコードを追加してください。
VStack(spacing: 32) { Text("やる") .font(.largeTitle) // ここを追加↓ .frame(width: 160, height: 160) .background { Color.yellow } Text("コインを投げる") }
今回は高さと幅ともに160
を指定したことで、背面が正方形になったことを確認できます。また、高さや幅に何も指定されていない場合は、元のView
の大きさを引き継ぎます。
円形のViewを作る
現在、四角形の背面になっていますが、これを円形に変更していきます。SwiftUIでは、図形を表現するためにShape
が用意されており、Circle
やCapsule
、Rectangle
など、さまざまな形状を簡単に作成できます。これらの図形もView
として扱えるため、他のView
と組み合わせて自由に見た目を調整できます。
次のようにColor.yellow
の部分をCircle()
に変更します。
VStack(spacing: 32) { Text("やる") .font(.largeTitle) .frame(width: 160, height: 160) .background { // ここを変更↓ Circle() } Text("コインを投げる") }
Circle()
は文字通り、円の図形を作成できます。プレビューにも円が表示されました。やる
というテキストが見えなくなっているのは、Circle()
の色がText
のデフォルトと同じ色になっているためです。
Shapeに色を付ける
黒塗りになってしまっているCircle()
に色を付けていきます。Circle()
のようなShape
に色を付けるには.fill
モディファイアを使用します。
VStack(spacing: 32) { Text("やる") .font(.largeTitle) .frame(width: 160, height: 160) .background { Circle() // ここを変更↓ .fill(.yellow) } Text("コインを投げる") }
黒く塗り潰された円が黄色くなり、やる
という文字も見えるようになりました。
これでコイン部分は完成です。
コイントスボタンを作る
次はコイントスを実行するためのボタンを作ります。
Text("コインを投げる")
の部分を前回学んだButton
に変更します。その変更に合わせて、Text
のfont
も設定しました。
struct YesNoCoinTossView: View { var body: some View { VStack(spacing: 60) { Text("迷ったら時は\nコインで決めよう") .multilineTextAlignment(.center) .font(.largeTitle) VStack(spacing: 32) { Text("やる") .font(.largeTitle) .frame(width: 160, height: 160) .background { Circle() .fill(.yellow) } // ここを変更↓ Button { // コイントスの実装 } label: { Text("コインを投げる") .font(.title) } } } } }
コインを投げる
の色が青く変わり、Button
になりました。実際にプレビュー画面上を触ってみて押せているようなアニメーションを感じることができます。まだ、Button
のアクションを設定していないため、何も起こりません。
前回は、次のような記述形式のButton
を使用しましたが、今回使用しているものでは、action:
やlabel:
が省略されているだけで機能は同じです。
Button(action: { }, label: { })