From ffdba4224aae43d92014f801cb8417af6e46b0b4 Mon Sep 17 00:00:00 2001 From: peisonger Date: Fri, 5 Jun 2026 03:13:03 +0900 Subject: [PATCH] =?UTF-8?q?fix=20:=20=EB=9D=BC=EC=9D=B4=EB=B8=8C=EC=95=A1?= =?UTF-8?q?=ED=8B=B0=EB=B9=84=ED=8B=B0=20expanded=C2=B7=EB=9D=BD=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=B0=20=ED=83=80=EC=9D=B4=EB=A8=B8=20HH:MM:SS=20?= =?UTF-8?q?=ED=8F=AC=EB=A7=B7=EC=9C=BC=EB=A1=9C=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SemosanWidget/SemosanLiveActivity.swift | 22 +++++++++++------ ios/SemosanWidget/SemosanLiveActivity.swift | 24 ++++++++++++------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/ios-native/SemosanWidget/SemosanLiveActivity.swift b/ios-native/SemosanWidget/SemosanLiveActivity.swift index 051a194..e5a7581 100644 --- a/ios-native/SemosanWidget/SemosanLiveActivity.swift +++ b/ios-native/SemosanWidget/SemosanLiveActivity.swift @@ -33,17 +33,25 @@ private struct LiveTimerText: View { var body: some View { Group { if state.isRunning, let epoch = state.timerStartEpoch { - Text(Date(timeIntervalSince1970: epoch / 1000), style: .timer) - .monospacedDigit() + let startDate = Date(timeIntervalSince1970: epoch / 1000) + TimelineView(.periodic(from: .now, by: 1.0)) { tl in + let elapsed = max(0, Int(tl.date.timeIntervalSince(startDate))) + Text(formatExpanded(elapsed)) + .font(.custom("Lexend-SemiBold", size: fontSize)) + .kerning(kerning) + .foregroundColor(C.timerGreen) + .minimumScaleFactor(0.6) + .lineLimit(1) + } } else { Text(formatExpanded(state.elapsedSeconds)) + .font(.custom("Lexend-SemiBold", size: fontSize)) + .kerning(kerning) + .foregroundColor(C.timerGreen) + .minimumScaleFactor(0.6) + .lineLimit(1) } } - .font(.custom("Lexend-SemiBold", size: fontSize)) - .kerning(kerning) - .foregroundColor(C.timerGreen) - .minimumScaleFactor(0.6) - .lineLimit(1) } } diff --git a/ios/SemosanWidget/SemosanLiveActivity.swift b/ios/SemosanWidget/SemosanLiveActivity.swift index d497c83..e5a7581 100644 --- a/ios/SemosanWidget/SemosanLiveActivity.swift +++ b/ios/SemosanWidget/SemosanLiveActivity.swift @@ -33,19 +33,25 @@ private struct LiveTimerText: View { var body: some View { Group { if state.isRunning, let epoch = state.timerStartEpoch { - // 실행 중: 시스템 클록 기반 네이티브 타이머 (JS 업데이트 불필요) - Text(Date(timeIntervalSince1970: epoch / 1000), style: .timer) - .monospacedDigit() + let startDate = Date(timeIntervalSince1970: epoch / 1000) + TimelineView(.periodic(from: .now, by: 1.0)) { tl in + let elapsed = max(0, Int(tl.date.timeIntervalSince(startDate))) + Text(formatExpanded(elapsed)) + .font(.custom("Lexend-SemiBold", size: fontSize)) + .kerning(kerning) + .foregroundColor(C.timerGreen) + .minimumScaleFactor(0.6) + .lineLimit(1) + } } else { - // 일시정지: JS에서 받은 정적 값 표시 Text(formatExpanded(state.elapsedSeconds)) + .font(.custom("Lexend-SemiBold", size: fontSize)) + .kerning(kerning) + .foregroundColor(C.timerGreen) + .minimumScaleFactor(0.6) + .lineLimit(1) } } - .font(.custom("Lexend-SemiBold", size: fontSize)) - .kerning(kerning) - .foregroundColor(C.timerGreen) - .minimumScaleFactor(0.6) - .lineLimit(1) } }