はじめに
前回は、アプリ「毎日いいことカウンター」を作りました。アプリが実際に形になるとワクワクしませんか?今回も楽しんでアプリを作っていきましょう。
アプリ作成の第2弾は「やるのかやらないのかコイントス」を作ります。生活の中で究極の2択を迫られる場面は多いと思いますが、そんな時に代わりに決断してくれるアプリがあったらいいなと思ったことはありませんか?今回は「やる」か「やらない」をコイントスで決めるアプリを作って素早い決断ができるようになりましょう。
友だちが揉めている時に「揉めたらコインで」とスッとアプリを出せたら、きっとカッコいいと思います。
開発環境
この連載では、次の環境を使用しています。
- macOS Sequoia 15.1
- Xcode 16.1
プロジェクトを立ち上げる
前回は、0からプロジェクトを作成しましたが、今回からは作ったプロジェクトの中に新規ファイルを作成して進めていきます。まだ作成していない方は前回のプロジェクトの準備を参考にして新規プロジェクトを作成してください。
それでは、Xcodeからプロジェクトを開いて、アプリを作っていきましょう。
アプリ 「やるのかやらないのかコイントス」を作る
ファイルを新規作成
やるのかやらないのかコイントス用にコードを記述するためのファイルを新規作成します。
-
Xcode上部メニューバーから
File
>New
>File from Template…
を選択します。 -
テンプレートを選択する画面が表示されます。①プラットフォームは、
iOS
を選択し、User Interface下の②SwiftUI View
を選択、③Next
を押します。 -
保存先を選択する画面では、④のファイル名に
YesNoCoinTossView
を入力し、⑤の項目が同様の値になっていることを確認し、⑥Create
を押します。 -
作成が完了すると、Xcodeのナビゲーターエリアに作成した
YesNoCoinTossView.swift
ファイルが表示されます。
このファイルのコードを更新しながらアプリを作っていきます。
Viewを任意の間隔で縦に並べる
今回のアプリでも各要素を縦に並べていきます。前回学んだVStack
を使用して変数body
内のコードを次のように書き換えます。
import SwiftUI struct YesNoCoinTossView: View { var body: some View { VStack(spacing: 60) { Text("迷ったら時はコインで決めよう") Text("やる") Text("コインを投げる") } } }
前回使用したVStack
と違う点は、spacing: 60
の値が割り当てられている点です。このspacing
に値を設定すると、VStack
内に配置している各要素のスペースを設定することができます。また、値を設定しない場合はデフォルトの値が使用されます。
今回は60
を設定しているため、各要素のスペースが60
になっています。
Viewを異なる間隔で縦に並べる
前述では各要素のスペースを60
に設定しましたが、アプリを作る中で「特定のView
の間隔だけは変えたい」といったシーンはあると思います。
そんな時は、VStack
の中でVStack
を使用することができるため、それぞれに指定したいスペースを設定することができます。
変数body
内のコードを次のように書き換えます。
struct YesNoCoinTossView: View { var body: some View { VStack(spacing: 60) { Text("迷ったら時はコインで決めよう") VStack(spacing: 32) { Text("やる") Text("コインを投げる") } } } }
このコードでは、変数body
内に二つのVStack
があり、外側と内側のVStack
にそれぞれ違うスペースを設定することで、特定のView
の間隔だけは変えています。
文字を改行する
一番上部のText
の文字列を次のように変更してください。
Text("迷ったら時は\nコインで決めよう")
改行する箇所に追加した\n
は改行をするための制御文字です。\n
の次の文字から改行することができます。アプリ側ではもちろん\n
が文字列として表示されることはないので安心してください。
Textを中央揃えにする
一番上部のText
の改行ができましたが、アプリのタイトルらしく中央揃えをしたいと思います。
複数行のText
の配置方法はmultilineTextAlignment
モディファイアで指定することができます。一番上部のText
にこのモディファイアをつけてみましょう。
Text("迷ったら時は\nコインで決めよう") .multilineTextAlignment(.center)
今回はText
の配置の値として.center
を設定しており、複数行のText
が中央揃えできているのが確認できます。
また、.multilineTextAlignment
モディファイアには、次の選択肢があります。
TextAlignment | 配置方法 |
.leading | 左揃え |
.center | 中央揃え |
.trailing | 右揃え |
以上でタイトルは完成です。せっかくなので、前回学んだ.font(.largeTitle)
を使用して、装飾しましょう。
Text("迷ったら時は\nコインで決めよう") .multilineTextAlignment(.center) .font(.largeTitle)
これで少しずつ見た目が整ってきました。