From bcd0f23c867a848ae49739107f547ebd72e32d8e Mon Sep 17 00:00:00 2001 From: kanghun1121 Date: Fri, 27 Feb 2026 12:59:16 +0900 Subject: [PATCH 01/17] =?UTF-8?q?design:=20weekly,=20monthly=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=ED=8A=B8=EB=9E=9C=EC=A7=80=EC=85=98=20=EC=95=A0?= =?UTF-8?q?=EB=8B=88=EB=A9=94=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Calendar/CalendarViewController.swift | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/FoodDiary/Presentation/Sources/Calendar/CalendarViewController.swift b/FoodDiary/Presentation/Sources/Calendar/CalendarViewController.swift index 599db6dd..5f857d40 100644 --- a/FoodDiary/Presentation/Sources/Calendar/CalendarViewController.swift +++ b/FoodDiary/Presentation/Sources/Calendar/CalendarViewController.swift @@ -50,17 +50,31 @@ public final class CalendarViewController: UIViewController { private func showViewController(for mode: ViewMode) { let targetVC = mode == .weekly ? weeklyVC : monthlyVC - if let currentChild { - currentChild.willMove(toParent: nil) - currentChild.view.removeFromSuperview() - currentChild.removeFromParent() + // 초기 로드: 애니메이션 없이 바로 추가 + guard let outgoingVC = currentChild else { + addChild(targetVC) + view.addSubview(targetVC.view) + targetVC.view.snp.makeConstraints { $0.edges.equalToSuperview() } + targetVC.didMove(toParent: self) + currentChild = targetVC + return } addChild(targetVC) + targetVC.view.alpha = 0 view.addSubview(targetVC.view) targetVC.view.snp.makeConstraints { $0.edges.equalToSuperview() } - targetVC.didMove(toParent: self) - currentChild = targetVC + UIView.animate(withDuration: 0.4) { + targetVC.view.alpha = 1 + outgoingVC.view.alpha = 0 + } completion: { _ in + outgoingVC.view.alpha = 1 + outgoingVC.willMove(toParent: nil) + outgoingVC.view.removeFromSuperview() + outgoingVC.removeFromParent() + targetVC.didMove(toParent: self) + self.currentChild = targetVC + } } } From f172704c5c5bc17ae5ef21c3458a13c15d10a974 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 15:55:31 +0900 Subject: [PATCH 02/17] =?UTF-8?q?fix:=20=ED=82=A4=EB=B3=B4=EB=93=9C=20?= =?UTF-8?q?=EB=B0=94=EA=B9=A5=20=ED=83=AD=20=EC=8B=9C=20=ED=82=A4=EB=B3=B4?= =?UTF-8?q?=EB=93=9C=20=ED=95=B4=EC=A0=9C=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AddressSearchViewController.swift | 1 + .../UIViewController+DismissKeyboard.swift | 18 ++++++++++++++++++ .../EditFoodRecordViewController.swift | 1 + 3 files changed, 20 insertions(+) create mode 100644 FoodDiary/Presentation/Sources/Core/UIViewController+DismissKeyboard.swift diff --git a/FoodDiary/Presentation/Sources/AddressSearch/AddressSearchViewController.swift b/FoodDiary/Presentation/Sources/AddressSearch/AddressSearchViewController.swift index 16459e0d..a01b6c2a 100644 --- a/FoodDiary/Presentation/Sources/AddressSearch/AddressSearchViewController.swift +++ b/FoodDiary/Presentation/Sources/AddressSearch/AddressSearchViewController.swift @@ -127,6 +127,7 @@ public final class AddressSearchViewController< super.viewDidLoad() setupUI() setupConstraints() + setupKeyboardDismissGesture() setupBindings() } diff --git a/FoodDiary/Presentation/Sources/Core/UIViewController+DismissKeyboard.swift b/FoodDiary/Presentation/Sources/Core/UIViewController+DismissKeyboard.swift new file mode 100644 index 00000000..8e765f56 --- /dev/null +++ b/FoodDiary/Presentation/Sources/Core/UIViewController+DismissKeyboard.swift @@ -0,0 +1,18 @@ +// +// UIViewController+DismissKeyboard.swift +// Presentation +// + +import UIKit + +extension UIViewController { + func setupKeyboardDismissGesture() { + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboardOnTap)) + tapGesture.cancelsTouchesInView = false + view.addGestureRecognizer(tapGesture) + } + + @objc private func dismissKeyboardOnTap() { + view.endEditing(true) + } +} diff --git a/FoodDiary/Presentation/Sources/EditFoodRecord/EditFoodRecordViewController.swift b/FoodDiary/Presentation/Sources/EditFoodRecord/EditFoodRecordViewController.swift index ad77a5c2..c83fcf5d 100644 --- a/FoodDiary/Presentation/Sources/EditFoodRecord/EditFoodRecordViewController.swift +++ b/FoodDiary/Presentation/Sources/EditFoodRecord/EditFoodRecordViewController.swift @@ -129,6 +129,7 @@ public final class EditFoodRecordViewController< setupNavigation() setupUI() setupConstraints() + setupKeyboardDismissGesture() setupCategoryChips() setupBindings() } From df29adb5cba5a39f306bf9f2ac775c543a83b5e7 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 16:03:00 +0900 Subject: [PATCH 03/17] =?UTF-8?q?feat:=20=EC=9C=84=ED=81=B4=EB=A6=AC=20?= =?UTF-8?q?=EC=82=AC=EC=A7=84=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EC=84=B1?= =?UTF-8?q?=EA=B3=B5=20=EC=8B=9C=20=EC=83=81=EC=84=B8=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=9D=B4=EB=8F=99=20+=20=ED=95=B4=EB=8B=B9=20?= =?UTF-8?q?=EC=84=B9=EC=85=98=20=EC=9E=90=EB=8F=99=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A1=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoodDiary/App/Sources/AppFlowController.swift | 12 ++++- .../UseCase/SaveFoodRecordUseCase.swift | 5 +- .../MonthlyCalendarViewController.swift | 6 +-- .../ViewModel/WeeklyCalendarViewModel.swift | 7 +-- .../WeeklyCalendarViewController.swift | 15 +++--- .../Sources/Detail/DetailViewController.swift | 49 +++++++++++++++++++ 6 files changed, 77 insertions(+), 17 deletions(-) diff --git a/FoodDiary/App/Sources/AppFlowController.swift b/FoodDiary/App/Sources/AppFlowController.swift index 43e3349c..2261dfa1 100644 --- a/FoodDiary/App/Sources/AppFlowController.swift +++ b/FoodDiary/App/Sources/AppFlowController.swift @@ -209,10 +209,12 @@ extension AppFlowController { return WeeklyCalendarViewController( viewModel: weeklyViewModel, imageProvider: imageProvider, - detailViewControllerFactory: { [weak self] date, records, onDismiss in + detailViewControllerFactory: { [weak self] date, records, scrollToMealType, shouldPopToRoot, onDismiss in self?.makeDetailViewController( date: date, records: records, + scrollToMealType: scrollToMealType, + shouldPopToRoot: shouldPopToRoot, onDismissWithDate: onDismiss ) ?? UIViewController() } @@ -231,10 +233,12 @@ extension AppFlowController { return MonthlyCalendarViewController( viewModel: monthlyViewModel, - detailViewControllerFactory: { [weak self] date, records, onDismiss in + detailViewControllerFactory: { [weak self] date, records, scrollToMealType, shouldPopToRoot, onDismiss in self?.makeDetailViewController( date: date, records: records, + scrollToMealType: scrollToMealType, + shouldPopToRoot: shouldPopToRoot, onDismissWithDate: onDismiss ) ?? UIViewController() } @@ -441,6 +445,8 @@ extension AppFlowController { fileprivate func makeDetailViewController( date: Date, records: [FoodRecord], + scrollToMealType: MealType? = nil, + shouldPopToRoot: Bool = false, onDismissWithDate: ((Date) -> Void)? = nil ) -> UIViewController { guard @@ -451,6 +457,8 @@ extension AppFlowController { return DetailViewController( viewModel: detailVM, + initialScrollTarget: scrollToMealType, + shouldPopToRoot: shouldPopToRoot, onDismissWithDate: onDismissWithDate, editViewControllerFactory: { [weak self] record in self?.makeEditViewController(for: record) ?? UIViewController() diff --git a/FoodDiary/Domain/Sources/UseCase/SaveFoodRecordUseCase.swift b/FoodDiary/Domain/Sources/UseCase/SaveFoodRecordUseCase.swift index 18863e8f..e874de84 100644 --- a/FoodDiary/Domain/Sources/UseCase/SaveFoodRecordUseCase.swift +++ b/FoodDiary/Domain/Sources/UseCase/SaveFoodRecordUseCase.swift @@ -20,11 +20,12 @@ public struct SaveFoodRecordUseCase< /// 서버 업로드 수행 /// 분석 완료 시 Remote Push로 결과 수신 + @discardableResult public func execute( from assets: [any ImageAssetable], date: Date - ) async throws { + ) async throws -> [UploadResult] { let request = CreateFoodRecordRequest(date: date, assets: assets) - _ = try await repository.uploadRecord(request) + return try await repository.uploadRecord(request) } } diff --git a/FoodDiary/Presentation/Sources/Calendar/MonthlyCalendar/MonthlyCalendarViewController.swift b/FoodDiary/Presentation/Sources/Calendar/MonthlyCalendar/MonthlyCalendarViewController.swift index 94ad529b..8930e368 100644 --- a/FoodDiary/Presentation/Sources/Calendar/MonthlyCalendar/MonthlyCalendarViewController.swift +++ b/FoodDiary/Presentation/Sources/Calendar/MonthlyCalendar/MonthlyCalendarViewController.swift @@ -21,7 +21,7 @@ public final class MonthlyCalendarViewController< // MARK: - Dependencies private let viewModel: MonthlyCalendarViewModel - private let detailViewControllerFactory: ((Date, [FoodRecord], ((Date) -> Void)?) -> UIViewController) + private let detailViewControllerFactory: ((Date, [FoodRecord], MealType?, Bool, ((Date) -> Void)?) -> UIViewController) // MARK: - UI Components @@ -69,7 +69,7 @@ public final class MonthlyCalendarViewController< public init( viewModel: MonthlyCalendarViewModel, - detailViewControllerFactory: @escaping (Date, [FoodRecord], ((Date) -> Void)?) -> UIViewController + detailViewControllerFactory: @escaping (Date, [FoodRecord], MealType?, Bool, ((Date) -> Void)?) -> UIViewController ) { self.viewModel = viewModel self.detailViewControllerFactory = detailViewControllerFactory @@ -300,7 +300,7 @@ public final class MonthlyCalendarViewController< // MARK: - Navigation private func navigateToDetail(date: Date, records: [FoodRecord]) { - let detailVC = detailViewControllerFactory(date, records) { [weak self] date in + let detailVC = detailViewControllerFactory(date, records, nil, false) { [weak self] date in self?.viewModel.input.send(.updateMonth(date)) } detailVC.hidesBottomBarWhenPushed = true diff --git a/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/ViewModel/WeeklyCalendarViewModel.swift b/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/ViewModel/WeeklyCalendarViewModel.swift index bbaa8a1b..73110a44 100644 --- a/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/ViewModel/WeeklyCalendarViewModel.swift +++ b/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/ViewModel/WeeklyCalendarViewModel.swift @@ -188,11 +188,12 @@ public final class WeeklyCalendarViewModel< guard !assets.isEmpty else { return } do { - try await saveFoodRecordUseCase.execute( + let results = try await saveFoodRecordUseCase.execute( from: assets, date: state.selectedDate ) - eventSubject.send(.uploadCompleted) + let mealType = results.first?.mealType ?? .breakfast + eventSubject.send(.uploadCompleted(date: state.selectedDate, mealType: mealType)) await loadWeekData(for: currentWeekBaseDate) await updateDateContent(for: state.selectedDate) } catch { @@ -288,7 +289,7 @@ extension WeeklyCalendarViewModel { public enum Event { case photoAuthorizationDenied - case uploadCompleted + case uploadCompleted(date: Date, mealType: MealType) case saveFailed(Error) case loadFailed(Error) } diff --git a/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/WeeklyCalendarViewController.swift b/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/WeeklyCalendarViewController.swift index d6c8b0c0..13fe78d1 100644 --- a/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/WeeklyCalendarViewController.swift +++ b/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/WeeklyCalendarViewController.swift @@ -28,7 +28,7 @@ public final class WeeklyCalendarViewController< RecordRepo, AssetRepo, AuthRepo, PushObserver > private let imageProvider: ImageProvider - private let detailViewControllerFactory: (Date, [FoodRecord], ((Date) -> Void)?) -> UIViewController + private let detailViewControllerFactory: (Date, [FoodRecord], MealType?, Bool, ((Date) -> Void)?) -> UIViewController // MARK: - UI Components @@ -71,7 +71,7 @@ public final class WeeklyCalendarViewController< RecordRepo, AssetRepo, AuthRepo, PushObserver >, imageProvider: ImageProvider, - detailViewControllerFactory: @escaping (Date, [FoodRecord], ((Date) -> Void)?) -> UIViewController + detailViewControllerFactory: @escaping (Date, [FoodRecord], MealType?, Bool, ((Date) -> Void)?) -> UIViewController ) { self.viewModel = viewModel self.imageProvider = imageProvider @@ -241,8 +241,8 @@ public final class WeeklyCalendarViewController< switch event { case .photoAuthorizationDenied: self?.showPhotoAuthorizationDeniedAlert() - case .uploadCompleted: - break + case .uploadCompleted(let date, let mealType): + self?.navigateToDetail(for: date, scrollTo: mealType, shouldPopToRoot: true) case .saveFailed(let error): self?.showSaveErrorAlert(error) case .loadFailed(let error): @@ -334,7 +334,6 @@ public final class WeeklyCalendarViewController< private func handleImagePickerResult(_ result: ImagePickerResult) { switch result { case .selected(let assets): - navigationController?.popViewController(animated: true) viewModel.input.send(.saveSelectedPhotos(assets)) case .cancelled: navigationController?.popViewController(animated: true) @@ -361,11 +360,13 @@ public final class WeeklyCalendarViewController< present(alert, animated: true) } - private func navigateToDetail(for date: Date) { + private func navigateToDetail(for date: Date, scrollTo mealType: MealType? = nil, shouldPopToRoot: Bool = false) { let records = viewModel.state.weekDays.records(for: date) - let detailVC = detailViewControllerFactory(date, records) { [weak self] date in + let detailVC = detailViewControllerFactory(date, records, mealType, shouldPopToRoot) { [weak self] date in self?.viewModel.input.send(.refreshData(date)) } navigationController?.pushViewController(detailVC, animated: true) } + + } diff --git a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift index aa505c8d..b8d14838 100644 --- a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift +++ b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift @@ -113,11 +113,16 @@ public final class DetailViewController< // MARK: - State private var cancellables = Set() + private let initialScrollTarget: MealType? + private var hasPerformedInitialScroll = false + private let shouldPopToRoot: Bool // MARK: - Init public init( viewModel: DetailViewModel, + initialScrollTarget: MealType? = nil, + shouldPopToRoot: Bool = false, onDismissWithDate: ((Date) -> Void)? = nil, editViewControllerFactory: ((FoodRecord) -> UIViewController)? = nil, presentImagePickerHandler: ( @@ -125,6 +130,8 @@ public final class DetailViewController< )? = nil ) { self.viewModel = viewModel + self.initialScrollTarget = initialScrollTarget + self.shouldPopToRoot = shouldPopToRoot self.onDismissWithDate = onDismissWithDate self.editViewControllerFactory = editViewControllerFactory self.presentImagePickerHandler = presentImagePickerHandler @@ -166,6 +173,15 @@ public final class DetailViewController< private func setupNavigation() { title = "상세보기" + if shouldPopToRoot { + navigationItem.leftBarButtonItem = UIBarButtonItem( + image: UIImage(systemName: "chevron.left"), + style: .plain, + target: self, + action: #selector(backButtonTapped) + ) + } + // More button let deleteAllAction = UIAction( title: "전체삭제", @@ -181,6 +197,11 @@ public final class DetailViewController< ) } + @objc private func backButtonTapped() { + onDismissWithDate?(viewModel.state.currentDate) + navigationController?.popToRootViewController(animated: true) + } + private func setupUI() { view.backgroundColor = .sdBase @@ -289,6 +310,13 @@ public final class DetailViewController< self.loadingIndicatorView.stopAnimating() let state = self.viewModel.state self.updateMealSections(state.recordsByMealType, processingRecords: state.processingRecordsByMealType) + + if let mealType = self.initialScrollTarget, !self.hasPerformedInitialScroll { + self.hasPerformedInitialScroll = true + DispatchQueue.main.async { + self.scrollToMealSection(mealType) + } + } } } .store(in: &cancellables) @@ -531,4 +559,25 @@ public final class DetailViewController< alert.addAction(UIAlertAction(title: "확인", style: .default)) present(alert, animated: true) } + + // MARK: - Scroll to Meal Section + + private func mealSectionView(for mealType: MealType) -> MealSectionView { + switch mealType { + case .breakfast: return breakfastSection + case .lunch: return lunchSection + case .dinner: return dinnerSection + case .snack: return snackSection + } + } + + private func scrollToMealSection(_ mealType: MealType, animated: Bool = true) { + let targetSection = mealSectionView(for: mealType) + let sectionFrame = targetSection.convert(targetSection.bounds, to: scrollView) + let targetOffset = CGPoint( + x: 0, + y: sectionFrame.origin.y - scrollView.adjustedContentInset.top + ) + scrollView.setContentOffset(targetOffset, animated: animated) + } } From f76433781f9cd307360a8778c34e7d3db5d429e9 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 16:54:05 +0900 Subject: [PATCH 04/17] =?UTF-8?q?fix:=20=EC=8A=A4=ED=94=8C=EB=9E=98?= =?UTF-8?q?=EC=8B=9C=20=EA=B8=B8=EA=B2=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoodDiary/App/Sources/AppFlowController.swift | 33 +++++++++++- FoodDiary/App/Sources/SplashView.swift | 52 +++++++++++++++++++ 2 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 FoodDiary/App/Sources/SplashView.swift diff --git a/FoodDiary/App/Sources/AppFlowController.swift b/FoodDiary/App/Sources/AppFlowController.swift index 2261dfa1..d6b77a95 100644 --- a/FoodDiary/App/Sources/AppFlowController.swift +++ b/FoodDiary/App/Sources/AppFlowController.swift @@ -24,6 +24,7 @@ final class AppFlowController: UIViewController { private var cancellables = Set() private let container: DIContainer private var pendingDeepLinkDate: String? + private var splashView: SplashView? public init(container: DIContainer) { self.container = container @@ -37,11 +38,19 @@ final class AppFlowController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .sdBase + setupSplashView() setupNetworkMonitoring() setupAnalysisCompletionToast() setupDeepLinkHandling() } + private func setupSplashView() { + let splash = SplashView() + view.addSubview(splash) + splash.snp.makeConstraints { $0.edges.equalToSuperview() } + splashView = splash + } + private func setupAnalysisCompletionToast() { NotificationCenter.default.publisher(for: AppNotification.Push.analysisResult) .receive(on: DispatchQueue.main) @@ -85,9 +94,12 @@ extension AppFlowController { fileprivate func proceedToNextScreen() { Task { - let isLogin = await validateToken() + prefetchFoodImageAssets() - try? await fetchUserProfile() + async let minimumDelay: Void = Task.sleep(for: .seconds(1.5)) + async let loginResult = validateTokenAndFetchProfile() + + let (_, isLogin) = try await (minimumDelay, loginResult) await MainActor.run { [weak self] in guard let self else { return } @@ -98,9 +110,26 @@ extension AppFlowController { } } + private func removeSplashView() { + splashView?.animateRemoval() + splashView = nil + } + + private func prefetchFoodImageAssets() { + guard let useCase = try? container.resolve(FetchUseCase.self) else { return } + useCase.prefetch(forPreviousWeeks: 2, of: Date()) + } + + private func validateTokenAndFetchProfile() async -> Bool { + let isLogin = await validateToken() + try? await fetchUserProfile() + return isLogin + } + fileprivate func routeToAppropriateScreen(isLogin: Bool) { let destinationVC = isLogin ? createMainView() : createLoginView() transition(to: destinationVC) + removeSplashView() if isLogin { registerForRemoteNotificationsAfterLogin() } diff --git a/FoodDiary/App/Sources/SplashView.swift b/FoodDiary/App/Sources/SplashView.swift new file mode 100644 index 00000000..76ce3f07 --- /dev/null +++ b/FoodDiary/App/Sources/SplashView.swift @@ -0,0 +1,52 @@ +// +// SplashView.swift +// App +// + +import SnapKit +import UIKit + +final class SplashView: UIView { + init() { + super.init(frame: .zero) + + backgroundColor = UIColor( + red: 0.098, green: 0.094, blue: 0.129, alpha: 1 + ) + + let logoImageView = UIImageView(image: UIImage(named: "logo")) + logoImageView.contentMode = .scaleAspectFit + + let characterImageView = UIImageView(image: UIImage(named: "character")) + characterImageView.contentMode = .scaleAspectFit + + addSubview(logoImageView) + addSubview(characterImageView) + + characterImageView.snp.makeConstraints { + $0.centerX.centerY.equalToSuperview() + $0.width.equalTo(175) + $0.height.equalTo(145) + } + + logoImageView.snp.makeConstraints { + $0.centerX.equalToSuperview() + $0.bottom.equalTo(characterImageView.snp.top).offset(-27) + $0.width.equalTo(215) + $0.height.equalTo(64) + } + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func animateRemoval(completion: (() -> Void)? = nil) { + UIView.animate(withDuration: 0.3, animations: { + self.alpha = 0 + }, completion: { _ in + self.removeFromSuperview() + completion?() + }) + } +} From 8a32b21fbea7cbfd3b8f5b3200ccc7e2f3c3b436 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 17:05:48 +0900 Subject: [PATCH 05/17] =?UTF-8?q?refactor:=20UX=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/Sources/Detail/DetailViewController.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift index b8d14838..19c29087 100644 --- a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift +++ b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift @@ -571,13 +571,13 @@ public final class DetailViewController< } } - private func scrollToMealSection(_ mealType: MealType, animated: Bool = true) { + private func scrollToMealSection(_ mealType: MealType) { let targetSection = mealSectionView(for: mealType) let sectionFrame = targetSection.convert(targetSection.bounds, to: scrollView) let targetOffset = CGPoint( x: 0, y: sectionFrame.origin.y - scrollView.adjustedContentInset.top ) - scrollView.setContentOffset(targetOffset, animated: animated) + scrollView.setContentOffset(targetOffset, animated: false) } } From 5af857f6422c4259c3edda8444b6c91c9d7c3fe1 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 17:14:43 +0900 Subject: [PATCH 06/17] =?UTF-8?q?feat:=20=EC=BD=98=ED=85=90=EC=B8=A0=20?= =?UTF-8?q?=EC=9A=94=EC=95=BD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/Sources/DTO/DiaryResponseDTO.swift | 2 +- .../Domain/Sources/Entity/FoodRecord.swift | 3 + .../Components/MealRecordedContentView.swift | 30 ++++++- .../Detail/Components/NoteContentView.swift | 89 +++++++++++++++++++ 4 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 FoodDiary/Presentation/Sources/Detail/Components/NoteContentView.swift diff --git a/FoodDiary/Data/Sources/DTO/DiaryResponseDTO.swift b/FoodDiary/Data/Sources/DTO/DiaryResponseDTO.swift index fa37a880..40bb2348 100644 --- a/FoodDiary/Data/Sources/DTO/DiaryResponseDTO.swift +++ b/FoodDiary/Data/Sources/DTO/DiaryResponseDTO.swift @@ -27,7 +27,6 @@ public struct DiaryResponseDTO: Decodable { public let createdAt: String public let photos: [DiaryPhotoDTO] - // 새 API 필드 (도메인에서 미사용) public let note: String? public let photoCount: Int? public let userId: String? @@ -129,6 +128,7 @@ extension DiaryResponseDTO { restaurantUrl: restaurantUrl, address: roadAddress, hashtags: tags ?? [], + note: note, createdAt: createdDate, analysisStatus: status ) diff --git a/FoodDiary/Domain/Sources/Entity/FoodRecord.swift b/FoodDiary/Domain/Sources/Entity/FoodRecord.swift index a1e63b31..a2caa5b4 100644 --- a/FoodDiary/Domain/Sources/Entity/FoodRecord.swift +++ b/FoodDiary/Domain/Sources/Entity/FoodRecord.swift @@ -33,6 +33,7 @@ public struct FoodRecord: Identifiable, Equatable, Sendable { public let restaurantUrl: String? public let address: String? public let hashtags: [String] + public let note: String? public let createdAt: Date public let analysisStatus: AnalysisStatus @@ -55,6 +56,7 @@ public struct FoodRecord: Identifiable, Equatable, Sendable { restaurantUrl: String? = nil, address: String? = nil, hashtags: [String] = [], + note: String? = nil, createdAt: Date, analysisStatus: AnalysisStatus = .completed ) { @@ -67,6 +69,7 @@ public struct FoodRecord: Identifiable, Equatable, Sendable { self.restaurantUrl = restaurantUrl self.address = address self.hashtags = hashtags + self.note = note self.createdAt = createdAt self.analysisStatus = analysisStatus } diff --git a/FoodDiary/Presentation/Sources/Detail/Components/MealRecordedContentView.swift b/FoodDiary/Presentation/Sources/Detail/Components/MealRecordedContentView.swift index 6fb6dda8..c5399bbd 100644 --- a/FoodDiary/Presentation/Sources/Detail/Components/MealRecordedContentView.swift +++ b/FoodDiary/Presentation/Sources/Detail/Components/MealRecordedContentView.swift @@ -22,6 +22,7 @@ final class MealRecordedContentView: UIView { static let hashtagTopSpacing: CGFloat = 16 static let buttonImagePadding: CGFloat = 4 static let textHorizontalInset: CGFloat = 10 + static let noteTopSpacing: CGFloat = 16 } // MARK: - Types @@ -47,6 +48,7 @@ final class MealRecordedContentView: UIView { private var labelTrailingWithoutButton: Constraint? private var infoTopWithPageControl: Constraint? private var infoTopWithoutPageControl: Constraint? + private var infoBottomConstraint: Constraint? // MARK: - UI Components @@ -98,6 +100,8 @@ final class MealRecordedContentView: UIView { private let hashtagLabel = UILabel() + private var noteView: NoteContentView? + // MARK: - Init init( @@ -184,7 +188,6 @@ final class MealRecordedContentView: UIView { hashtagLabel.snp.makeConstraints { $0.top.equalTo(restaurantNameLabel.snp.bottom).offset(Constants.hashtagTopSpacing) $0.leading.trailing.equalToSuperview() - $0.bottom.equalToSuperview() } } @@ -270,6 +273,31 @@ final class MealRecordedContentView: UIView { let hashtagText = record.hashtags.map { "#\($0)" }.joined(separator: " ") hashtagLabel.setText(hashtagText, style: .p12, color: .white) hashtagLabel.isHidden = record.hashtags.isEmpty + + configureNoteSection(with: record) + } + + private func configureNoteSection(with record: FoodRecord) { + noteView?.removeFromSuperview() + noteView = nil + infoBottomConstraint?.deactivate() + + let hasNote = !(record.note ?? "").isEmpty + + if hasNote { + let newNoteView = NoteContentView(note: record.note!) + infoContainerView.addSubview(newNoteView) + newNoteView.snp.makeConstraints { + $0.top.equalTo(hashtagLabel.snp.bottom).offset(Constants.noteTopSpacing) + $0.leading.trailing.equalToSuperview() + infoBottomConstraint = $0.bottom.equalToSuperview().constraint + } + noteView = newNoteView + } else { + hashtagLabel.snp.makeConstraints { + infoBottomConstraint = $0.bottom.equalToSuperview().constraint + } + } } private func updateCurrentRecord(for page: Int) { diff --git a/FoodDiary/Presentation/Sources/Detail/Components/NoteContentView.swift b/FoodDiary/Presentation/Sources/Detail/Components/NoteContentView.swift new file mode 100644 index 00000000..697b5e7f --- /dev/null +++ b/FoodDiary/Presentation/Sources/Detail/Components/NoteContentView.swift @@ -0,0 +1,89 @@ +// +// NoteContentView.swift +// Presentation +// + +import DesignSystem +import SnapKit +import UIKit + +/// AI 요약 노트를 표시하는 뷰 +final class NoteContentView: UIView { + + // MARK: - Constants + + private enum Constants { + static let containerPadding: CGFloat = 16 + static let cornerRadius: CGFloat = 10 + static let headerIconSize: CGFloat = 10 + static let headerSpacing: CGFloat = 4 + static let contentTopSpacing: CGFloat = 12 + } + + // MARK: - UI Components + + private let headerIconView: UIImageView = { + let imageView = UIImageView() + imageView.image = DesignSystemAsset.iconAi.image + imageView.contentMode = .scaleAspectFit + return imageView + }() + + private let headerLabel = UILabel() + + private let contentLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 0 + return label + }() + + // MARK: - Init + + init(note: String) { + super.init(frame: .zero) + setupUI() + setupConstraints() + configure(note: note) + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Setup + + private func setupUI() { + backgroundColor = .sd900 + layer.cornerRadius = Constants.cornerRadius + clipsToBounds = true + + addSubview(headerIconView) + addSubview(headerLabel) + addSubview(contentLabel) + } + + private func setupConstraints() { + headerIconView.snp.makeConstraints { + $0.top.leading.equalToSuperview().inset(Constants.containerPadding) + $0.size.equalTo(Constants.headerIconSize) + } + + headerLabel.snp.makeConstraints { + $0.centerY.equalTo(headerIconView) + $0.leading.equalTo(headerIconView.snp.trailing).offset(Constants.headerSpacing) + $0.trailing.lessThanOrEqualToSuperview().inset(Constants.containerPadding) + } + + contentLabel.snp.makeConstraints { + $0.top.equalTo(headerIconView.snp.bottom).offset(Constants.contentTopSpacing) + $0.leading.trailing.equalToSuperview().inset(Constants.containerPadding) + $0.bottom.equalToSuperview().inset(Constants.containerPadding) + } + } + + private func configure(note: String) { + headerLabel.setText("AI가 요약했어요", style: .p12, color: .gray050) + contentLabel.setText(note, style: .p12, color: .gray100, lineSpacing: 4) + } +} From 8c4ccb0d0ee39694fdbd30c0997b56703ee82d26 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 17:19:22 +0900 Subject: [PATCH 07/17] =?UTF-8?q?feat:=20=EC=83=81=EC=84=B8=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=20=ED=83=AD=20=EC=8B=9C=20=EC=B2=98=EC=9D=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=20=EB=B3=B4=EC=97=AC=EC=A3=BC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Detail/DetailViewController.swift | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift index 19c29087..b0eb886e 100644 --- a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift +++ b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift @@ -309,9 +309,13 @@ public final class DetailViewController< } else { self.loadingIndicatorView.stopAnimating() let state = self.viewModel.state - self.updateMealSections(state.recordsByMealType, processingRecords: state.processingRecordsByMealType) + self.updateMealSections( + state.recordsByMealType, + processingRecords: state.processingRecordsByMealType) - if let mealType = self.initialScrollTarget, !self.hasPerformedInitialScroll { + if let mealType = self.initialScrollTarget ?? self.firstContentMealType(state), + !self.hasPerformedInitialScroll + { self.hasPerformedInitialScroll = true DispatchQueue.main.async { self.scrollToMealSection(mealType) @@ -571,6 +575,16 @@ public final class DetailViewController< } } + private func firstContentMealType(_ state: DetailViewModel.State) + -> MealType? + { + let orderedMealTypes: [MealType] = [.breakfast, .lunch, .dinner, .snack] + return orderedMealTypes.first { mealType in + state.recordsByMealType[mealType] != nil + || state.processingRecordsByMealType[mealType] != nil + } + } + private func scrollToMealSection(_ mealType: MealType) { let targetSection = mealSectionView(for: mealType) let sectionFrame = targetSection.convert(targetSection.bounds, to: scrollView) From 479544c5eeb1d4c86b32cfe7da46b1d33ae79110 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 17:25:35 +0900 Subject: [PATCH 08/17] =?UTF-8?q?fix:=20=EC=A0=84=EC=B2=B4=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=8B=9C=20isLoading=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift b/FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift index a5f401df..edf27162 100644 --- a/FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift +++ b/FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift @@ -228,7 +228,6 @@ public final class DetailViewModel< guard !state.recordsByMealType.isEmpty || !state.processingRecordsByMealType.isEmpty else { return } state.isLoading = true - defer { state.isLoading = false } do { for (_, record) in state.recordsByMealType { @@ -243,6 +242,7 @@ public final class DetailViewModel< state.processingRecordsByMealType = [:] eventSubject.send(.deleteAllCompleted) } catch { + state.isLoading = false eventSubject.send(.deleteAllFailed(error)) } } From 6a1efcd5c9d0e93707349081adf582da3bc844ad Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 17:38:23 +0900 Subject: [PATCH 09/17] =?UTF-8?q?feat:=20=EB=82=A0=EC=A7=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=20=EC=8B=9C=20=EC=B2=AB=20=EA=B8=B0=EB=A1=9D=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=EB=A1=9C=20=EC=9E=90=EB=8F=99=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Detail/DetailViewController.swift | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift index b0eb886e..cc1cc4b4 100644 --- a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift +++ b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift @@ -113,8 +113,8 @@ public final class DetailViewController< // MARK: - State private var cancellables = Set() - private let initialScrollTarget: MealType? - private var hasPerformedInitialScroll = false + private var initialScrollTarget: MealType? + private let scrollToFirstRecord: Bool private let shouldPopToRoot: Bool // MARK: - Init @@ -122,6 +122,7 @@ public final class DetailViewController< public init( viewModel: DetailViewModel, initialScrollTarget: MealType? = nil, + scrollToFirstRecord: Bool = true, shouldPopToRoot: Bool = false, onDismissWithDate: ((Date) -> Void)? = nil, editViewControllerFactory: ((FoodRecord) -> UIViewController)? = nil, @@ -131,6 +132,7 @@ public final class DetailViewController< ) { self.viewModel = viewModel self.initialScrollTarget = initialScrollTarget + self.scrollToFirstRecord = scrollToFirstRecord self.shouldPopToRoot = shouldPopToRoot self.onDismissWithDate = onDismissWithDate self.editViewControllerFactory = editViewControllerFactory @@ -198,8 +200,16 @@ public final class DetailViewController< } @objc private func backButtonTapped() { + dismissDetail() + } + + private func dismissDetail() { onDismissWithDate?(viewModel.state.currentDate) - navigationController?.popToRootViewController(animated: true) + if shouldPopToRoot { + navigationController?.popToRootViewController(animated: true) + } else { + navigationController?.popViewController(animated: true) + } } private func setupUI() { @@ -273,20 +283,6 @@ public final class DetailViewController< .store(in: &cancellables) // Output: ViewModel → View - viewModel.statePublisher - .map(\.currentDate) - .removeDuplicates { Calendar.current.isDate($0, inSameDayAs: $1) } - .dropFirst() - .receive(on: DispatchQueue.main) - .sink { [weak self] _ in - guard let self else { return } - self.scrollView.setContentOffset( - CGPoint(x: 0, y: -self.scrollView.adjustedContentInset.top), - animated: false - ) - } - .store(in: &cancellables) - viewModel.statePublisher .map(\.dateText) .removeDuplicates() @@ -313,10 +309,14 @@ public final class DetailViewController< state.recordsByMealType, processingRecords: state.processingRecordsByMealType) - if let mealType = self.initialScrollTarget ?? self.firstContentMealType(state), - !self.hasPerformedInitialScroll + if let mealType = self.initialScrollTarget { + self.initialScrollTarget = nil + DispatchQueue.main.async { + self.scrollToMealSection(mealType) + } + } else if self.scrollToFirstRecord, + let mealType = self.firstContentMealType(state) { - self.hasPerformedInitialScroll = true DispatchQueue.main.async { self.scrollToMealSection(mealType) } @@ -355,7 +355,7 @@ public final class DetailViewController< case .saveFailed(let error): self?.showSaveErrorAlert(error) case .deleteAllCompleted: - self?.navigationController?.popViewController(animated: true) + self?.dismissDetail() case .deleteAllFailed(let error): self?.showDeleteErrorAlert(error) } From ae4e9cadd20f09b5a55022646f693afe499da50d Mon Sep 17 00:00:00 2001 From: kanghun1121 Date: Fri, 27 Feb 2026 20:53:24 +0900 Subject: [PATCH 10/17] =?UTF-8?q?design:=20=ED=94=BC=EC=BB=A4=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=97=86=EC=9D=84=20=EB=95=8C=EC=9D=98=20?= =?UTF-8?q?=EC=97=90=EC=85=8B=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../empty-image.imageset/Contents.json | 23 ++++++++++++++++++ .../empty-image.imageset/empty-image 1.png | Bin 0 -> 35654 bytes .../empty-image.imageset/empty-image 2.png | Bin 0 -> 86195 bytes .../empty-image.imageset/empty-image.png | Bin 0 -> 10765 bytes .../ImagePickerViewController.swift | 18 +++++++++++--- 5 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 FoodDiary/DesignSystem/Resources/Assets.xcassets/empty-image.imageset/Contents.json create mode 100644 FoodDiary/DesignSystem/Resources/Assets.xcassets/empty-image.imageset/empty-image 1.png create mode 100644 FoodDiary/DesignSystem/Resources/Assets.xcassets/empty-image.imageset/empty-image 2.png create mode 100644 FoodDiary/DesignSystem/Resources/Assets.xcassets/empty-image.imageset/empty-image.png diff --git a/FoodDiary/DesignSystem/Resources/Assets.xcassets/empty-image.imageset/Contents.json b/FoodDiary/DesignSystem/Resources/Assets.xcassets/empty-image.imageset/Contents.json new file mode 100644 index 00000000..dc7cc779 --- /dev/null +++ b/FoodDiary/DesignSystem/Resources/Assets.xcassets/empty-image.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "empty-image.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "empty-image 1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "empty-image 2.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/FoodDiary/DesignSystem/Resources/Assets.xcassets/empty-image.imageset/empty-image 1.png b/FoodDiary/DesignSystem/Resources/Assets.xcassets/empty-image.imageset/empty-image 1.png new file mode 100644 index 0000000000000000000000000000000000000000..2292586335f2b6387cccfd8bbbf4f2fa6ad26db9 GIT binary patch literal 35654 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 v-r$>t=WC>s#?+$Ov+n<69-&Z7&j;*)X~ Date: Fri, 27 Feb 2026 21:19:26 +0900 Subject: [PATCH 11/17] =?UTF-8?q?fix:=20=EC=82=AC=EC=A7=84=20=EC=A7=80?= =?UTF-8?q?=EC=9A=B0=EA=B3=A0=20=EC=A0=80=EC=9E=A5=ED=96=88=EC=9D=84=20?= =?UTF-8?q?=EB=95=8C=20=EC=95=84=EB=AC=B4=EA=B2=83=EB=8F=84=20=EB=9C=A8?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift | 3 +-- .../Sources/EditFoodRecord/EditFoodRecordViewModel.swift | 6 ++++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift b/FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift index edf27162..e4792ed3 100644 --- a/FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift +++ b/FoodDiary/Presentation/Sources/Detail/DetailViewModel.swift @@ -143,6 +143,7 @@ public final class DetailViewModel< @MainActor private func loadRecords(for date: Date) async { state.isLoading = true + defer { state.isLoading = false } do { let allRecords = try await fetchRecordsUseCase.execute(for: date) @@ -158,8 +159,6 @@ public final class DetailViewModel< print("Failed to load records: \(error)") } } - - state.isLoading = false } private static func groupRecordsByMealType(_ records: [FoodRecord]) -> [MealType: FoodRecord] { diff --git a/FoodDiary/Presentation/Sources/EditFoodRecord/EditFoodRecordViewModel.swift b/FoodDiary/Presentation/Sources/EditFoodRecord/EditFoodRecordViewModel.swift index d89b59cb..8064910f 100644 --- a/FoodDiary/Presentation/Sources/EditFoodRecord/EditFoodRecordViewModel.swift +++ b/FoodDiary/Presentation/Sources/EditFoodRecord/EditFoodRecordViewModel.swift @@ -132,6 +132,12 @@ public final class EditFoodRecordViewModel { state.isSaving = true defer { state.isSaving = false } + // 모든 사진이 제거된 경우 레코드 삭제 처리 + if state.photos.isEmpty && state.newAssets.isEmpty { + await performDelete() + return + } + let request = UpdateFoodRecordRequest( id: state.originalRecord.id, genre: state.selectedGenre, From cc79b9a8ccc667dfb3f10450e2adadf76e2e91f0 Mon Sep 17 00:00:00 2001 From: kanghun1121 Date: Fri, 27 Feb 2026 21:33:55 +0900 Subject: [PATCH 12/17] =?UTF-8?q?fix:=20=EA=B2=80=EC=83=89=20=EC=85=80=20?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/AddressSearch/AddressSearchViewController.swift | 1 + .../AddressSearch/Components/AddressSearchResultCell.swift | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/FoodDiary/Presentation/Sources/AddressSearch/AddressSearchViewController.swift b/FoodDiary/Presentation/Sources/AddressSearch/AddressSearchViewController.swift index a01b6c2a..4ff81883 100644 --- a/FoodDiary/Presentation/Sources/AddressSearch/AddressSearchViewController.swift +++ b/FoodDiary/Presentation/Sources/AddressSearch/AddressSearchViewController.swift @@ -247,6 +247,7 @@ public final class AddressSearchViewController< Task { @MainActor [weak self] in guard let self else { return } + self.containerHeightConstraint?.update(offset: self.view.bounds.height) self.view.layoutIfNeeded() let contentHeight = self.resultsTableView.contentSize.height self.containerHeightConstraint?.update(offset: contentHeight) diff --git a/FoodDiary/Presentation/Sources/AddressSearch/Components/AddressSearchResultCell.swift b/FoodDiary/Presentation/Sources/AddressSearch/Components/AddressSearchResultCell.swift index 2cda999b..6a456b8a 100644 --- a/FoodDiary/Presentation/Sources/AddressSearch/Components/AddressSearchResultCell.swift +++ b/FoodDiary/Presentation/Sources/AddressSearch/Components/AddressSearchResultCell.swift @@ -95,7 +95,7 @@ final class AddressSearchResultCell: UITableViewCell { selectButton.snp.makeConstraints { $0.trailing.equalToSuperview().offset(-Constants.horizontalPadding) - $0.top.equalToSuperview().offset(Constants.verticalPadding) + $0.centerY.equalToSuperview() } selectButton.setContentHuggingPriority(.required, for: .horizontal) selectButton.setContentCompressionResistancePriority(.required, for: .horizontal) From 6354885b92c4cbb471336e529735ecf5f0902bbc Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 21:41:07 +0900 Subject: [PATCH 13/17] fix: line height --- .../Sources/Core/Typography.swift | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/FoodDiary/Presentation/Sources/Core/Typography.swift b/FoodDiary/Presentation/Sources/Core/Typography.swift index 3ab6f87e..56d826a7 100644 --- a/FoodDiary/Presentation/Sources/Core/Typography.swift +++ b/FoodDiary/Presentation/Sources/Core/Typography.swift @@ -17,7 +17,7 @@ import DesignSystem /// label.attributedText = Typography.hd24.styled("뭐먹었지") /// ``` public enum Typography { - // MARK: - Headline (Bold, 130% line height) + // MARK: - Headline (Bold, 140% line height) /// 페이지 헤드라인 - 24pt Bold case hd24 /// 페이지 타이틀 - 20pt Bold @@ -27,7 +27,7 @@ public enum Typography { /// 페이지 서브 타이틀 2nd - 16pt Bold case hd16 - // MARK: - Paragraph (Regular, 100% line height) + // MARK: - Paragraph (Regular, 140% line height) /// 본문 - 18pt Regular case p18 /// 캡션 - 15pt Regular @@ -63,13 +63,8 @@ public enum Typography { } } - private var lineHeightMultiple: CGFloat { - switch self { - case .hd24, .hd20, .hd18, .hd16: - return 1.0 - case .p18, .p15, .p14, .p12, .p10: - return 1.0 - } + private var lineHeight: CGFloat { + font.pointSize * 1.4 } private var letterSpacing: CGFloat { @@ -78,15 +73,19 @@ public enum Typography { public func styled(_ text: String, color: UIColor = .white, alignment: NSTextAlignment = .natural, lineSpacing: CGFloat = 0) -> NSAttributedString { let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.lineHeightMultiple = lineHeightMultiple + paragraphStyle.minimumLineHeight = lineHeight + paragraphStyle.maximumLineHeight = lineHeight paragraphStyle.alignment = alignment paragraphStyle.lineSpacing = lineSpacing + let baselineOffset = (lineHeight - font.lineHeight) / 4 + return NSAttributedString(string: text, attributes: [ .font: font, .kern: letterSpacing, .foregroundColor: color, - .paragraphStyle: paragraphStyle + .paragraphStyle: paragraphStyle, + .baselineOffset: baselineOffset ]) } } From 54cd4e74c8cf5d6dc0cc2cd2efdc1bb617496782 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 21:51:51 +0900 Subject: [PATCH 14/17] =?UTF-8?q?fix:=20=ED=96=89=EA=B0=84=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FoodDiary/Presentation/Sources/Core/Typography.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/FoodDiary/Presentation/Sources/Core/Typography.swift b/FoodDiary/Presentation/Sources/Core/Typography.swift index 56d826a7..ede4dd66 100644 --- a/FoodDiary/Presentation/Sources/Core/Typography.swift +++ b/FoodDiary/Presentation/Sources/Core/Typography.swift @@ -17,7 +17,7 @@ import DesignSystem /// label.attributedText = Typography.hd24.styled("뭐먹었지") /// ``` public enum Typography { - // MARK: - Headline (Bold, 140% line height) + // MARK: - Headline (Bold, 120% line height) /// 페이지 헤드라인 - 24pt Bold case hd24 /// 페이지 타이틀 - 20pt Bold @@ -27,7 +27,7 @@ public enum Typography { /// 페이지 서브 타이틀 2nd - 16pt Bold case hd16 - // MARK: - Paragraph (Regular, 140% line height) + // MARK: - Paragraph (Regular, 120% line height) /// 본문 - 18pt Regular case p18 /// 캡션 - 15pt Regular @@ -64,7 +64,7 @@ public enum Typography { } private var lineHeight: CGFloat { - font.pointSize * 1.4 + font.pointSize * 1.15 } private var letterSpacing: CGFloat { From 6f576786cb41a8601723db098b65b49dcf522a66 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 21:52:02 +0900 Subject: [PATCH 15/17] =?UTF-8?q?fix:=20=ED=95=B4=EC=8B=9C=ED=83=9C?= =?UTF-8?q?=EA=B7=B8=20=EC=A4=84=EB=B0=94=EA=BF=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Detail/Components/MealRecordedContentView.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/FoodDiary/Presentation/Sources/Detail/Components/MealRecordedContentView.swift b/FoodDiary/Presentation/Sources/Detail/Components/MealRecordedContentView.swift index c5399bbd..4469d11e 100644 --- a/FoodDiary/Presentation/Sources/Detail/Components/MealRecordedContentView.swift +++ b/FoodDiary/Presentation/Sources/Detail/Components/MealRecordedContentView.swift @@ -98,7 +98,11 @@ final class MealRecordedContentView: UIView { return button }() - private let hashtagLabel = UILabel() + private let hashtagLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 0 + return label + }() private var noteView: NoteContentView? From e8c63bb1495b5fbcabb347ebd4b4a745a563fcae Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 22:04:42 +0900 Subject: [PATCH 16/17] =?UTF-8?q?fix:=20=EC=88=98=EC=A0=95=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=20=ED=9B=84=20=ED=95=B4=EB=8B=B9=20=EC=B9=B4=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EB=B3=B5=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/Detail/DetailViewController.swift | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift index cc1cc4b4..b071560d 100644 --- a/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift +++ b/FoodDiary/Presentation/Sources/Detail/DetailViewController.swift @@ -113,7 +113,7 @@ public final class DetailViewController< // MARK: - State private var cancellables = Set() - private var initialScrollTarget: MealType? + private var pendingScrollTarget: MealType? private let scrollToFirstRecord: Bool private let shouldPopToRoot: Bool @@ -131,7 +131,7 @@ public final class DetailViewController< )? = nil ) { self.viewModel = viewModel - self.initialScrollTarget = initialScrollTarget + self.pendingScrollTarget = initialScrollTarget self.scrollToFirstRecord = scrollToFirstRecord self.shouldPopToRoot = shouldPopToRoot self.onDismissWithDate = onDismissWithDate @@ -309,14 +309,7 @@ public final class DetailViewController< state.recordsByMealType, processingRecords: state.processingRecordsByMealType) - if let mealType = self.initialScrollTarget { - self.initialScrollTarget = nil - DispatchQueue.main.async { - self.scrollToMealSection(mealType) - } - } else if self.scrollToFirstRecord, - let mealType = self.firstContentMealType(state) - { + if let mealType = self.resolveScrollTarget(state) { DispatchQueue.main.async { self.scrollToMealSection(mealType) } @@ -514,6 +507,7 @@ public final class DetailViewController< private func handleEdit(record: FoodRecord) { guard let editVC = editViewControllerFactory?(record) else { return } + pendingScrollTarget = record.mealType navigationController?.pushViewController(editVC, animated: true) } @@ -575,6 +569,19 @@ public final class DetailViewController< } } + private func resolveScrollTarget( + _ state: DetailViewModel.State + ) -> MealType? { + if let mealType = pendingScrollTarget { + pendingScrollTarget = nil + return mealType + } + if scrollToFirstRecord { + return firstContentMealType(state) + } + return nil + } + private func firstContentMealType(_ state: DetailViewModel.State) -> MealType? { From ed2404ecaff7570453dd554ee3074d751848de54 Mon Sep 17 00:00:00 2001 From: enebin Date: Fri, 27 Feb 2026 22:47:14 +0900 Subject: [PATCH 17/17] =?UTF-8?q?fix:=20=EA=B8=80=EB=A6=AC=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModel/MonthlyCalendarViewModel.swift | 39 +++++++++++++++++++ .../ViewModel/WeeklyCalendarViewModel.swift | 21 +++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/FoodDiary/Presentation/Sources/Calendar/MonthlyCalendar/ViewModel/MonthlyCalendarViewModel.swift b/FoodDiary/Presentation/Sources/Calendar/MonthlyCalendar/ViewModel/MonthlyCalendarViewModel.swift index 3900a93f..27c60797 100644 --- a/FoodDiary/Presentation/Sources/Calendar/MonthlyCalendar/ViewModel/MonthlyCalendarViewModel.swift +++ b/FoodDiary/Presentation/Sources/Calendar/MonthlyCalendar/ViewModel/MonthlyCalendarViewModel.swift @@ -59,7 +59,16 @@ public final class MonthlyCalendarViewModel< self.getNicknameUseCase = getNicknameUseCase let today = Date() + let calendar = Calendar.seoul + let period = calendar.monthlyCalendarPeriod(for: today) + let placeholderDays = Self.generatePlaceholderDays( + for: period, currentMonth: today, calendar: calendar + ) + self.stateSubject = CurrentValueSubject(State(currentDisplayDate: today)) + state.monthDays = placeholderDays + state.numberOfWeeks = placeholderDays.count / 7 + state.monthYearText = today.formatMonthText() setupBindings() input.send(.loadNickname) @@ -132,6 +141,36 @@ public final class MonthlyCalendarViewModel< } } + private static func generatePlaceholderDays( + for period: DateInterval, + currentMonth: Date, + calendar: Calendar + ) -> [MonthlyCalendarDay] { + let today = calendar.startOfDay(for: Date()) + let currentMonthComponents = calendar.dateComponents([.year, .month], from: currentMonth) + + var days: [MonthlyCalendarDay] = [] + var currentDate = period.start + + while currentDate < period.end { + let dateComponents = calendar.dateComponents([.year, .month], from: currentDate) + let isCurrentMonth = dateComponents.year == currentMonthComponents.year && + dateComponents.month == currentMonthComponents.month + + days.append(MonthlyCalendarDay( + date: currentDate, + dayNumber: calendar.component(.day, from: currentDate), + isCurrentMonth: isCurrentMonth, + isToday: calendar.isDate(currentDate, inSameDayAs: today), + imageURLs: [] + )) + guard let next = calendar.date(byAdding: .day, value: 1, to: currentDate) else { break } + currentDate = next + } + + return days + } + private func requestPhotoAuthorizationIfNeeded() async { let status = requestPhotoAuthorizationUseCase.currentStatus() if status == .notDetermined { diff --git a/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/ViewModel/WeeklyCalendarViewModel.swift b/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/ViewModel/WeeklyCalendarViewModel.swift index 73110a44..a6e36b80 100644 --- a/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/ViewModel/WeeklyCalendarViewModel.swift +++ b/FoodDiary/Presentation/Sources/Calendar/WeeklyCalendar/ViewModel/WeeklyCalendarViewModel.swift @@ -66,11 +66,28 @@ public final class WeeklyCalendarViewModel< self.pushNotificationObserver = pushNotificationObserver self.getNicknameUseCase = getNicknameUseCase - self.calendar = Calendar.current + let cal = Calendar.current + self.calendar = cal - let today = calendar.startOfDay(for: Date()) + let today = cal.startOfDay(for: Date()) self.currentWeekBaseDate = today + + let (weekStart, _) = cal.weekRange(for: today) + let weekDates = cal.weekDates(from: weekStart) + let placeholderWeekDays = weekDates.map { dayDate in + WeeklyCalendarDay( + date: dayDate, + dayOfWeek: dayDate.formatDayOfWeek(), + dayNumber: dayDate.formatDayNumber(calendar: cal), + isToday: cal.isDateInToday(dayDate), + isFuture: cal.startOfDay(for: dayDate) > today, + records: [] + ) + } + self.stateSubject = CurrentValueSubject(State(selectedDate: today)) + state.weekDays = placeholderWeekDays + state.monthText = today.formatMonthText() setupBindings() input.send(.loadNickname)