[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을 이용하면 사용자가 책을 선택하고 선택한 책에 대한 정보를 미리 볼 수 있습니다.