UIKit에서 PDF 뷰어 만들기: 문서 보기 기능 추가

작성일 :

UIKit에서 PDF 뷰어 만들기: 문서 보기 기능 추가

iOS 애플리케이션에서 PDF 문서를 보기 위한 기능을 구현하는 것은 흔한 요구사항입니다. 이 글에서는 SwiftUIKit을 사용하여 PDF 뷰어를 만드는 방법과 추가적으로 문서 보기 기능을 더하는 과정을 단계별로 설명합니다.

프로젝트 설정

PDF 뷰어 기능을 추가하기 위해 새로운 프로젝트를 만들어보겠습니다.

  1. 새 프로젝트 생성:

    • Xcode를 열고 새 프로젝트를 생성합니다. Single View App 템플릿을 선택합니다.
    • 프로젝트 이름을 설정하고 Swift 언어와 UIKit을 선택합니다.
  2. 필수 라이브러리 추가:

    • PDFKit은 PDF 문서를 처리하는 데 필수적인 라이브러리입니다. PDFKit을 사용하기 위해 import PDFKit 문을 파일 상단에 추가합니다.

기본 PDF 뷰어 구현

다음으로, 기본적인 PDF 뷰어를 구현해보겠습니다. 이를 위해 PDFView 클래스를 사용합니다.

  1. UI에 PDFView 추가:
    • Main.storyboard에서 뷰 컨트롤러를 선택하고, PDFView를 추가합니다. PDFView는 PDF 문서를 렌더링하고 표시하는 역할을 합니다.
    • 뷰 컨트롤러에 PDFView를 연결하기 위해 아웃렛을 생성합니다.
    swift
    import UIKit
    import PDFKit
    
    class ViewController: UIViewController {
        @IBOutlet weak var pdfView: PDFView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            loadPDF()
        }
    
        func loadPDF() {
            if let path = Bundle.main.url(forResource: "sample", withExtension: "pdf") {
                if let document = PDFDocument(url: path) {
                    pdfView.document = document
                }
            }
        }
    }
    • loadPDF() 메서드는 번들에 포함된 PDF 파일을 로드하여 PDFView에 표시합니다.

문서 보기 기능 추가

기본적인 PDF 뷰어가 완성되었으니, 이제 추가 기능을 구현해보겠습니다. 여기에는 페이지 넘김, 확대/축소, 그리고 페이지 인디케이터가 포함됩니다.

페이지 넘김 기능

페이지 넘김을 쉽게 구현하기 위해서는 PDFViewgoToNextPage()goToPreviousPage() 메서드를 이용합니다.

  1. UI 버튼 추가:

    • Main.storyboard에서 다음 페이지와 이전 페이지로 이동하는 두 개의 버튼을 추가합니다.
  2. 액션 연결:

    • 버튼에 액션을 연결하여 사용자 입력이 있을 때 페이지가 변경되도록 합니다.
    swift
    @IBAction func nextPage(_ sender: Any) {
        pdfView.goToNextPage(nil)
    }
    
    @IBAction func previousPage(_ sender: Any) {
        pdfView.goToPreviousPage(nil)
    }

확대/축소 기능

PDFView는 자동으로 확대 및 축소를 지원합니다. 확대/축소 기능을 사용자가 제어할 수 있도록 버튼을 추가합니다.

  1. 확대/축소 버튼 추가:

    • Main.storyboard에서 확대 및 축소 버튼을 추가합니다.
  2. 액션 연결:

    • 각 버튼의 액션을 연결하여 확대 및 축소 기능을 제어합니다.
    swift
    @IBAction func zoomIn(_ sender: Any) {
        pdfView.scaleFactor = pdfView.scaleFactor * 1.1
    }
    
    @IBAction func zoomOut(_ sender: Any) {
        pdfView.scaleFactor = pdfView.scaleFactor * 0.9
    }

페이지 인디케이터

페이지 인디케이터를 추가하여 사용자가 현재 페이지 번호와 전체 페이지 수를 쉽게 확인할 수 있도록 합니다.

  1. 레이블 추가:

    • Main.storyboard에서 페이지 번호를 표시할 레이블을 추가합니다.
  2. 페이지 변경 알림 등록:

    • PDFView의 페이지 변경 알림을 감지하여 레이블을 업데이트합니다.
    swift
    override func viewDidLoad() {
        super.viewDidLoad()
        loadPDF()
        NotificationCenter.default.addObserver(self, selector: #selector(pageChanged), name: .PDFViewPageChanged, object: pdfView)
    }
    
    @objc func pageChanged() {
        if let currentPage = pdfView.currentPage, let totalPages = pdfView.document?.pageCount {
            pageNumberLabel.text = "Page \(currentPage.label ?? "") of \(totalPages)"
        }
    }

결론

이제 UIKit을 사용하여 기본적인 PDF 뷰어와 몇 가지 유용한 기능을 구현하는 방법을 배웠습니다. 본 튜토리얼을 통해 페이지 넘김, 확대/축소, 페이지 인디케이터 등을 추가하여 보다 완성도 높은 PDF 뷰어를 만들어 보세요. 추가로 요구되는 기능에 따라 파일 저장, 주석 추가, 검색 등의 기능도 확장할 수 있습니다.