Skip to content

feat: [키링 완성뷰/키링 상세뷰] - 영상 공유 기능 구현 및 이미지 저장 방식 수정#35

Merged
giljihun merged 16 commits into
developfrom
feature/-키링-완성뷰-공유기능-구현
Jan 31, 2026

Hidden character warning

The head ref may contain hidden characters: "feature/-\ud0a4\ub9c1-\uc644\uc131\ubdf0-\uacf5\uc720\uae30\ub2a5-\uad6c\ud604"
Merged

feat: [키링 완성뷰/키링 상세뷰] - 영상 공유 기능 구현 및 이미지 저장 방식 수정#35
giljihun merged 16 commits into
developfrom
feature/-키링-완성뷰-공유기능-구현

Conversation

@giljihun
Copy link
Copy Markdown
Member

개요

1. 공유 시트 구현

키링 영상을 생성하여 공유 시트로 공유할 수 있습니다.
시트 내부 아이템은 사용자의 앱에 따라 자동 할당됩니다.
스크린샷 참고

2. 전체 화면 캡처 -> 투명 배경 PNG 캡처로 변경

기존 실제 화면 캡처 로직에서 키링씬 캡처 방식으로 변경했습니다.

3. 완성뷰 로직을 키링 상세뷰에도 적용, 하이파이 적용

상세뷰에도 공유 버튼이 활용되므로, 함께 작업했습니다.

4. 그 외, 테스트하며 영상 생성/공유 시트 UX 개선

생성 중, 메인스로드 블로킹이나 정보 시트/공유 시트 충돌 등을 해결했습니다.

🎯 PR 내용

UIActivityViewController 선택 이유

SwiftUI의 ShareLink 대신 UIKit의 UIActivityViewController를 래핑한 ShareSheet를 사용했습니다.

ShareLink의 한계:

  • 버튼 탭 시 즉시 공유 시트가 열림
  • 비동기 작업(영상 생성) 완료를 기다릴 수 없음

UIActivityViewController의 장점:

  • 공유 시트 표시 타이밍 제어 가능
  • 영상 생성 완료 후 프로그래밍 방식으로 시트 표시
  • excludedActivityTypes로 공유 옵션 커스터마이징 가능

정리

ShareLink로는 영상 생성 대기가 불가능 (즉시 열림)
UIActivityViewController로 가능 (타이밍 제어)

변경 사항 자세히 보기

1. 공유 기능 (CollectionKeyringDetailView)

  • cachedVideoURL, showShareSheet, pendingShareAction 상태 추가
  • 하단 영역에 공유 버튼 추가
  • 정보 시트에 공유 버튼 추가 (onDismiss 콜백으로 시트 충돌 방지)
  • generateVideoForShare(), cleanupCachedVideo() 함수 추가

2. 이미지 저장 (투명 PNG)

  • captureVisibleScreen() → captureKeyringToPNG() 변경
  • KeyringCellScene을 UIColor.clear 배경으로 생성
  • UI 숨기기/복원 로직 제거 (불필요)

3. 네비게이션 바 개선

  • 메뉴 버튼 옆에 이미지 저장 버튼 추가
  • CustomNavigationBar → ZStack 직접 구현
  • 타이틀 화면 정중앙 정렬 (버튼 개수와 무관)

4. 성능 및 버그 수정

  • 메인스레드 블로킹 해결: Data(contentsOf:) 동기 호출 → URLSession 비동기 다운로드
  • 블러 타이밍 수정: isGeneratingVideo = false 후 0.3초 딜레이 추가하여 블러 애니메이션 완료 후 공유 시트 표시

📱 스크린샷 (UI 변경 시)

ScreenRecording_01-31-2026.13-32-21_1.1.mp4
ScreenRecording_01-31-2026.13-36-54_1.1.1.mov

깃헙 영상이 10mb까지라, 압축을해서 실제 화질과 다를 수 있습니다.

🔗 관련 이슈

✅ 체크리스트

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

- KeyringCellScene init에 bodyUIImage 파라미터 추가
- KeyringCellScene+Setup에서 UIImage 우선 사용하도록 수정
- KeyringCompleteView+SaveImage에서 화면 캡처 → Scene 캡처로 변경
- customBackgroundColor: .clear로 투명 배경 적용
- cachedVideoURL : 생성된 영상 캐싱 (시트 다시 열 수 있으니까)
- showShareSheet : 공유 시트 표시 여부
- 공유 버튼 클릭 시 캐시 확인 후 영상 생성
- generateVideoForShare(): 영상 생성 후 캐싱
- cleanupCachedVideo(): 캐시 파일 삭제
- ShareSheet.swift 생성 (파일명 바뀔 수도 있음)
- KeyringCompleteView에 연결
- 공유버튼 클릭 시, 정보시트가 확실히 내려가고 공유시트가 올라오게 해야함.
- 안그러면 시트 충돌로 스크롤버그 발생
- 기존 화면캡처 -> png 투명배경으로 저장
- bodyImage 동기 로딩 → URLSession 비동기 다운로드로 변경
- downloadBodyImage() 함수 추가
- KeyringAdapter에 preloadedBodyImage 전달
- 블러 애니메이션 종료 후 공유 시트 표시하도록 수정
@giljihun giljihun self-assigned this Jan 31, 2026
@giljihun giljihun linked an issue Jan 31, 2026 that may be closed by this pull request
@freshfresh22
Copy link
Copy Markdown
Member

카드 재발급 받으러 재입대?!!

@giljihun giljihun merged commit dc8a4fe into develop Jan 31, 2026
@giljihun giljihun deleted the feature/-키링-완성뷰-공유기능-구현 branch January 31, 2026 09:59
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.

Feature: [키링 완성뷰] - 공유기능 구현

2 participants