Skip to content

feat: [키링 만들기] 말 템플릿 완성#91

Merged
jini-coding merged 12 commits intodevelopfrom
style/키링-만들기정보입력뷰-말-템플릿용-시트-ui-구현
Feb 12, 2026

Hidden character warning

The head ref may contain hidden characters: "style/\ud0a4\ub9c1-\ub9cc\ub4e4\uae30\uc815\ubcf4\uc785\ub825\ubdf0-\ub9d0-\ud15c\ud50c\ub9bf\uc6a9-\uc2dc\ud2b8-ui-\uad6c\ud604"
Merged

feat: [키링 만들기] 말 템플릿 완성#91
jini-coding merged 12 commits intodevelopfrom
style/키링-만들기정보입력뷰-말-템플릿용-시트-ui-구현

Conversation

@jini-coding
Copy link
Member

🎯 PR 내용

1. 보관함 상세뷰 말 템플릿용 상세 정보 시트 UI 구현

  • 상세 화면 CollectionKeyringDetailView+Sheet.swift

    • 배너 이미지 추가 : 말 템플릿 전용 배너 이미지 표시 (여러 케이스 레이아웃 확인 완료)
    • 메모 섹션 변경 : 실제 메모 내용 대신 "작성된 메모는 2027년 1월 1일에 확인할 수 있어요." 안내 문구 표시
    • LockedMemoView 구조체 추가 : 잠긴 메모 상태를 표현하는 전용 뷰 컴포넌트
  • 편집 화면 KeyringEditView.swift

    • 말 템플릿일 때 이름, 메모 수정 불가 (태그는 수정 가능하므로 진입은 가능하게 함)
    • canEditName 계산 프로퍼티 추가로 편집 권한 제어
    • 말 템플릿일 때 실제 메모 대신 안내 문구 표시

2. 키링 생성 시 말 템플릿용 시트 UI 구현

  • 말 템플릿 전용 UI 분기 처리 추가
  • 메모 필드를 필수 항목으로 변경 + 아래에 가이드 문구 추가

KeyringInfoInputView+Helpers.swift

  • isNextButtonEnabled computed property 추가
  • 말 템플릿에서 메모 필수 입력 검증 로직 구현
  • 다음 버튼 활성화 조건
    • 기본: 이름 입력 + 욕설 필터 통과
    • WishHorse26: 기본 조건 + 메모 입력 필수

3. 일부 말 프레임에 회전, 오프셋 이동 추가

  • Frame 모델의 type 필드를 활용하여 프레임별 변환 적용 여부 결정

    • .rotationEffect().offset() modifier 조건부 적용
    • type "A" : 회전 및 오프셋 이동 적용
    • type "B" : 기본 상태 유지
  • 이미지 합성 로직 개선(WishHorse26VM+ImageConversion.swift)

    • composeWithTransform() 메서드 추가: type "A" 프레임 전용 합성 로직
    • 캔버스 높이 확장하여 회전 후 이미지 잘림 방지
    • 원본 이미지 크기 유지하면서 회전/오프셋 적용
    • 최적화된 오프셋 값 적용 (x: 29.58, y: 40) -> se기기 확인도 완료

📱 스크린샷 (UI 변경 시)

ScreenRecording_02-12-2026.21-43-35_1-1.mov
ScreenRecording_02-12-2026.21-43-35_1-1.mov

🔗 관련 이슈

#90

✅ 체크리스트

  • 빌드 성공
  • 테스트 완료
  • Self-review 완료

@jini-coding jini-coding requested a review from giljihun February 12, 2026 13:12
@jini-coding jini-coding self-assigned this Feb 12, 2026
@giljihun
Copy link
Member

image

리엘 고생하셨슴다~
여기 근데 좌우 패딩이 안맞는 feel인데 feel탓인가?

{
"images" : [
{
"filename" : "wishHorseBanner.pdf",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

무엇인고 했더니 말태그 그거구나!

let shouldApplyTransform = frame.type == "A"

if shouldApplyTransform {
// type "A": 회전과 오프셋이 적용된 이미지 합성
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A, B 타입으로 오케이~

@jini-coding
Copy link
Member Author

image

리엘 고생하셨슴다~ 여기 근데 좌우 패딩이 안맞는 feel인데 feel탓인가?

그렇게 말씀하시니 안 맞는거 같기도.... 확인해볼게요!

@jini-coding jini-coding merged commit e24164c into develop Feb 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Style: [키링 만들기/정보입력뷰] 말 템플릿용 시트 UI 구현

2 participants