# Ditto 화면 표현 방식 재분류 제안

2026-10-02 · 현재 SwiftUI 구조와 사용자가 공유한 7개 사례 기준. 아래는 UX 제안이며 앱의 화면 전환 방식을 변경한 결과가 아니다.

## 판단 기준

1. 이전 화면과 맥락을 유지하며 짧게 조회·선택하면 바텀시트.
2. 키보드·미리보기·여러 필드·하위 단계가 있는 독립 작업은 전체 화면 편집.
3. 실행/취소 두 선택만 있으면 확인창. 결과·대상·위험을 짧게 명시.
4. 별도 결정 없이 설명만 읽으면 인라인 도움말. 중요 설명을 자동 소멸하는 토스트에 넣지 않음.
5. 적은 수의 즉시 실행 옵션은 메뉴. 중요 기능을 길게 누르기에만 숨기지 않음.
6. 공유·카메라·사진 선택은 가능한 경우 OS 기능에 연결. 시스템 시트와 앱 시트를 중첩하지 않음.

## 우선 변경 제안

| 우선 | 현재 화면 | 확인한 구조/문제 | 권장 형태 | 이동/종료 계약 |
|---|---|---|---|---|
| P1 | 프로필 수정 `ProfileEditSheet` | 사진 선택, 이름·링크·컬러, 카드 미리보기, 생일 영역, 하단 완료. 본문에 fixedSize가 있고 작은 화면·키보드에서 공간 경쟁 | 전체 화면 편집. 설정에서 진입하면 같은 탐색 흐름의 편집 화면 | 취소 / 하단 완료. 미저장 변경만 폐기 확인. 저장 후 원래 설정/프로필로 복귀 |
| P1 | 그룹 만들기 `CreateGroupSheet` | 그룹 유형·이름·8개 배지·초대 안내. 진입 직후 키보드가 열리고 그룹 위젯 선택으로 후속 이동 | 전체 화면 생성 흐름 | 1. 그룹 정보 → 2. 필요시 위젯 선택. 완료 전 그룹을 중간 생성하지 않거나 생성 시점을 명확히 안내 |
| P1 | 스티커 보드 `StickerBoardSheet` | 300pt 캔버스, 드래그·사진 추출·그리기. 화면의 주 작업이 캔버스인데 시트가 높이를 제한 | 전체 화면 캔버스 | 현재 즉시 반영 동작은 유지하고 닫기. 저장 대기 방식으로 바꾸려면 별도 설계; 존재하지 않는 ‘완료 저장’을 추가하지 않음 |
| P1 | 친구 초대 `InviteSheet` | 공유·초대 수·보상 카드·근처 친구가 한 시트에 결합. 화면 높이 86%의 긴 목록 | ‘친구 초대’ 일반 화면 + ‘링크 공유’ 시스템 공유창 | 상단 바 뒤로. 공유는 하위 OS 동작으로 열고 초대 화면에 복귀. 보상·상태는 일반 화면에서 조회 |
| P2 | 친구 끊기 `UnfriendSheet` | 대상 사진·이름·애칭 카드·설명·버튼 2개. 애칭 재입력/변경 없음 | 시스템 확인창 | ‘지민 님과 친구를 끊을까요?’ + 결과 설명 + 취소 / 친구 끊기. 명시적 파괴적 버튼만 실행 |
| P2 | 플래터 가득 참 `FullSheet` | 한도/공간 설명과 닫기·정리하기만 있음 | 우선 인라인 상태 + 정리 액션. 추가를 시도한 순간에는 간단한 확인창 가능 | 원래 플래터 유지. ‘정리하기’는 편집 모드만 시작하고 자동 재배치는 별도 명시 액션 |
| P2 | 주파수 설명 `FreqInfoSheet` | 상태·짧은 설명·‘알겠어요’. 새 입력/선택 없음 | 해당 친구 카드의 인라인 도움말 | 펼치기/접기. 친구 신청 가능 상태의 CTA는 카드에 직접 표시. 새로운 수치 경쟁 UI 추가 없음 |
| P2 | 프로필 열람권 `OrbitInfoSheet` | 조회 제한/초기화/상태 설명·확인 버튼 | 후보 목록의 ‘이용 안내’ 접이식 영역 | 안내와 상태를 같은 화면에서 확인. 상세 정책 링크가 필요하면 일반 도움말 페이지 |
| P3 | 폴라로이드 진입 `PolaroidEntrySheet` | 카메라/앨범 보관 두 선택과 필름 수 | 위젯 내부에 두 명시 액션, 공간이 좁으면 탭 메뉴 | 카메라는 촬영 전체 화면, 앨범은 보관 화면. 필름 수는 위젯에 유지 |
| P3 | Ditto 형식 선택 `DittoAddSheet` | Image/GIF 2개 선택 후 업로드 화면 | 업로드 편집기의 상단 형식 선택 | 선택→새 시트→편집 단계를 하나 줄임. ‘추가’ 진입 의미와 남은 개수 안내 유지 |

## 시트를 유지할 영역

| 화면 | 유지 이유 | 보완 |
|---|---|---|
| 위젯 추가 `AddSheet` | 플래터에서 종류를 고르고 복귀하는 문맥. 시각형 목록이 선택을 도움 | 목록은 스크롤, 편집 시작 시 선택 시트 종료 → 전체 화면 편집. 편집 취소 후 목록 위치 복원 |
| 전체 댓글 `CommentsSheet` / WidgetComments | 원글을 확인하면서 읽고 짧게 답하는 작업 | medium/large 높이, 입력 시 확장, 입력 초안 보존. 현재 고정 상단 150pt는 개선 대상 |
| 미니 프로필 `UserProfileSheet`, `OrbitProfileSheet` | 댓글·읽은 사람 목록에서 빠른 확인 | 상세 프로필은 명시적으로 페이지 이동. 기존 모달 위에 새 전역 시트를 쌓지 않음 |
| 읽은 사람 `ReadersListSheet` | 짧은 보조 목록 | 시트 내부 스크롤. 프로필 진입은 시트 내 상세 단계 또는 부모 종료 후 페이지 이동 |
| 신고 `ReportSheet` | 현재 5개 사유 중 하나 선택 + 제출의 단일 작업 | 이유 선택이 초기화되지 않도록. 증거 첨부/장문 설명이 추가되면 전체 화면 신고 흐름으로 전환 |
| 친구 신청/수락 | 상대를 보며 짧은 편지·애칭을 정하는 보조 작업 | 키보드에 따라 large로 확장. 초안 보존/폐기 확인. 필드·단계가 늘면 전체 화면 전환 |
| 색상·비율·순서 조정 | 편집 중 일부 값만 조절하는 보조 작업 | 해당 편집 화면에서만 열고, 선택 후 미리보기 문맥으로 복귀 |

## 이미 전체 화면인 사례를 구분

- `PlatterAddSheet`: 바깥이 VStack + 일반 배경이고 BottomSheet/그래버/둥근 상단이 없음. 새로 바텀시트에서 변환할 대상이 아니라 **전체 화면 편집기 유지 및 헤더 정리** 대상.
- `DittoUploadSheet`: 일반 상단 바와 업로드 편집 화면. 같은 분류.
- `WidgetInfoSheet`: 어두운 전체 화면 미디어 뷰어. 클래스명 때문에 바텀시트로 집계하지 않음.
- `DrawingSheet`: 별도 그리기 화면. 캔버스 호스트 개선과 구분.

## 지난 규격과의 관계

상단 바는 사용자 요청에 따라 버튼 수·배치 4유형(N0/N1-L/N1-R/N2)으로 개정했다. 시트 3유형의 공통 치수와 종료 규칙은 유지한다. 표현 방식 선택 기준은 DS 1.1에 반영했으며 개별 앱 화면 전환 이관은 별도다. 다만 시트 규격을 만드는 것과 모든 기능을 시트에 넣는 것은 별개의 판단이다. 지난 회차에서 공통 헤더로 맞춘 친구 끊기·프로필 수정·친구 초대도 이번 정보 구조 검토에서는 더 적합한 표현 방식으로 전환할 후보가 된다. 이번 제안은 확정 전이며 네이티브 흐름은 변경하지 않았다.

## 피그마 반영 준비 상태

- 대상 파일: `XG8Cm5nLScPoNc9NAXX1DD`.
- 디자인 시스템 페이지: `1:166595` (`Design_system_최종`).
- 현행 UI 페이지: `0:1` (`UI_Final`).
- 최신 Home 영역: `1114:134718`; 위젯 추가 `1114:135818`; 프로필 수정 `1114:135256`.
- 계정 선택 대기: 연결된 두 계정 모두 대상 파일 조회 가능.
- 폰트: Pretendard Variable 스타일은 존재하나 연결 런타임에서 Regular/SemiBold/Bold 로딩 실패. 임의 대체 없이 선택 대기.
