Open2
SwiftUI: 時刻とかを等幅フォントで表示するには?
タイマーとかを作っているとき、表示が等幅フォントでないと時刻が進むにつれ数字列があっちゃこっちゃ行きます。
以下のように.monospacedDigit()
を使うといいですね。
let text = String(format: "%02d:%02d:%02d", hour, minute, second)
Text(text)
.font(Font.system(size: 48).monospacedDigit())
追記)
monospaceDigit
になっていたのをmonospacedDigit
に修正しました。
あと、タイマーの絵ですね。
円でカウントダウンされるやつ。
こんな感じの円ですが、末端の丸みとかどうするのかなと思いながら最初は自前で半円を両端に描いたりして、その半円の角度も計算したりして頑張っていたんです。
ですがChatGPTに聞いたら、以下のようにしてtimerProgress
を0.0〜1.0の範囲で変化させるだけでいいよ、と教えてくれました。
マジか。
ZStack {
Circle()
.stroke(lineWidth: 20)
.opacity(0.3)
.foregroundColor(.gray)
Circle()
.trim(from: 0.0, to: CGFloat(self.timerProgress))
.stroke(style: StrokeStyle(lineWidth: 20, lineCap: .round))
.foregroundColor(.blue)
.rotationEffect(.degrees(-90))
.animation(.linear, value: self.timerProgress)
let text = String(format: "%.0f", self.remainSeconds)
Text(text)
.font(.largeTitle.monospacedDigit())
.bold()
}
.frame(width: 200, height: 200)