[swift] PeekPop을 활용한 도서 읽기 앱의 책 정보 미리보기 기능 구현 방법
도서 읽기 앱에는 사용자가 책의 정보를 미리 볼 수 있는 편리한 기능이 필요합니다. PeekPop은 iOS에서 제공하는 기능으로, 뷰 컨트롤러를 피커 뷰처럼 미리보기 할 수 있게 해줍니다. 이번 포스트에서는 PeekPop을 활용하여 도서 읽기 앱의 책 정보 미리보기 기능을 구현하는 방법에 대해 알아보겠습니다.
1. PeekPop 설정하기
먼저, PeekPop을 사용하기 위해 UIViewControllerPreviewingDelegate
프로토콜을 채택해야 합니다. 이를 위해서는 뷰 컨트롤러에서 해당 프로토콜을 채택하고, registerForPreviewing(with:delegate:)
메서드를 사용하여 PeekPop 기능을 등록해야 합니다.
class BookViewController: UIViewController, UIViewControllerPreviewingDelegate {
override func viewDidLoad() {
super.viewDidLoad()
if traitCollection.forceTouchCapability == .available {
registerForPreviewing(with: self, sourceView: view)
}
}
// PeekPop을 위한 뷰 컨트롤러 반환
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = collectionView?.indexPathForItem(at: location),
let cell = collectionView?.cellForItem(at: indexPath) else {
return nil
}
// 책 정보를 담은 뷰 컨트롤러 생성
let bookPreviewViewController = BookPreviewViewController()
bookPreviewViewController.book = books[indexPath.row]
// 크기 조정과 함께 PeekPop을 위한 컨텍스트 설정
bookPreviewViewController.preferredContentSize = CGSize(width: 0.0, height: 300)
previewingContext.sourceRect = cell.frame
return bookPreviewViewController
}
// PeekPop이 활성화되었을 때 실행할 액션 정의
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
navigationController?.pushViewController(viewControllerToCommit, animated: true)
}
}
2. BookPreviewViewController 구현하기
책 정보를 미리보기하는 뷰 컨트롤러인 BookPreviewViewController를 구현해야 합니다. 해당 뷰 컨트롤러에서는 책의 정보를 표시하고 상세 정보를 볼 수 있도록 구현해야 합니다.
class BookPreviewViewController: UIViewController {
var book: Book?
override func viewDidLoad() {
super.viewDidLoad()
// 책 정보를 표시하는 UI 구성
let titleLabel = UILabel(frame: CGRect(x: 16, y: 16, width: view.frame.width - 32, height: 30))
titleLabel.text = book?.title
titleLabel.font = UIFont.boldSystemFont(ofSize: 24)
view.addSubview(titleLabel)
let authorLabel = UILabel(frame: CGRect(x: 16, y: 60, width: view.frame.width - 32, height: 20))
authorLabel.text = book?.author
view.addSubview(authorLabel)
let descriptionLabel = UILabel(frame: CGRect(x: 16, y: 100, width: view.frame.width - 32, height: view.frame.height - 100))
descriptionLabel.text = book?.description
descriptionLabel.numberOfLines = 0
view.addSubview(descriptionLabel)
}
}
위의 구현을 통해 PeekPop을 활용한 도서 읽기 앱의 책 정보 미리보기 기능을 구현할 수 있습니다. PeekPop을 이용하면 사용자가 책을 선택하고 선택한 책에 대한 정보를 미리 볼 수 있습니다.