Page: 페이지 상태 관리
Page 컴포넌트는 전체 페이지 시스템의 상태를 관리하는 핵심 부분입니다. 현재 페이지 번호를 추적하고 페이지 업데이트 요청을 처리하며 뷰를 다시 그리도록 알림을 보냅니다.
// 초기 페이지 번호가 0인 Page 인스턴스 생성
let currentPage = Page.first()
// 다음 페이지로 이동
currentPage.update(.next)
// 5페이지로 직접 이동
currentPage.update(.new(index: 5))
Page 컴포넌트는 Sources/SwiftUIPager/Page.swift에 구현되어 있으며, ObservableObject 프로토콜을 사용하여 SwiftUI 뷰 업데이트를 자동으로 트리거합니다.
Pager: 상호 작용 가능한 페이지 뷰 생성
Pager는 다양한 페이지 효과를 쉽게 만들 수 있는 SwiftUI 기반의 핵심 뷰 컴포넌트입니다. 다양한 설정을 통해 기본적인 페이지부터 복잡한 페이지까지 다양한 효과를 구현할 수 있습니다.
Pager(page: currentPage, data: itemList) { item in
// 사용자 정의 페이지 내용
Text(item.title)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.blue)
}
.interactive(scale: 0.9) // 비활성 페이지 크기 조절
.itemSpacing(15) // 페이지 간격
.padding(20) // 내부 패딩
.itemAspectRatio(0.7) // 페이지 가로세로 비율
PageTransition: 페이지 전환 정보
PageTransition은 페이지 전환에 대한 정보를 담고 있으며, 현재 페이지, 목표 페이지 및 페이지 증분 등의 정보를 제공합니다.
Pager(...)
.onPageWillTransition { transitionResult in
switch transitionResult {
case .success(let transition):
print("페이지 \(transition.currentPage)에서 \(transition.nextPage)로 변경")
case .failure(let error):
print("전환 실패: \(error)")
}
}
실용적인 설정과 최적화
- aspect ratio 설정:
itemAspectRatio를 사용하여 페이지의 가로세로 비율을 제어할 수 있습니다. - 페이지 감도 조정:
sensitivity속성을 사용하여 페이지 전환의 민감도를 조절할 수 있습니다.Pager(...) .sensitivity(.medium) // 중간 민감도 설정 - 무한 스크롤 활성화:
.loopPages(true, repeating: 1)를 사용하여 무한 스크롤을 활성화할 수 있습니다.