1

課題のために Mac (IOS ではない) 用の PDF ビューアを作成しようとしていますが、実際に PDF を表示する方法がわかりません。PDFView と Quartz を使用する必要があります。このトピックで見たほとんどのチュートリアルでは、次のようなものを使用しています。

view.setDocument(pdf)

しかし、Swiftは、PDFViewにはメンバーsetDocumentがないと言っています。ここでドキュメントを調べましたが、リモートでも機能するように見える唯一のものはsetCurrentSelectionだったので、試しました:

import Cocoa
import Quartz

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var PDFV: PDFView!


    func applicationDidFinishLaunching(_ aNotification: Notification) {
        
        let fileURL:URL = (Bundle.main.url(forResource: "example", withExtension: "pdf")! as NSURL) as URL
        let pdfDocument:PDFDocument = PDFDocument.self.init(url: fileURL as URL)!
        let thing:PDFSelection = PDFSelection.self.init(document: pdfDocument)
        PDFV.setCurrentSelection(thing, animate: true)
        // Insert code here to initialize your application
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        // Insert code here to tear down your application
    }
}

しかし、これを実行するとウィンドウがクラッシュし、xcode には次のように表示されます: Thread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP, subcode 0x0)。私が実際に何を使うつもりなのか誰か知っていますか?

4

2 に答える 2

0

Swift 4 では、以下を使用できます。

  1. PDFKitのインポート

  2. PDFをプロジェクトにコピーします

  3. 以下のコードを貼り付けます(test は pdf ファイル名)

    let pdfView = PDFView()
    
    pdfView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(pdfView)
    
    pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
    pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
    pdfView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
    
    guard let path = Bundle.main.url(forResource: "test", withExtension: "pdf") else { return }
    
    if let document = PDFDocument(url: path) {
        pdfView.document = document
    }
    
于 2018-06-19T10:21:08.360 に答える