2017-11-12 8 views
0

Ich zeichne eine Zeile mit PDFKit auf einer PDF. Ich außer Kraft berührt begann, bewegt usw., wie unten Berührungen auf dem pdfView des Document anmelden wie folgt:PDFs mit verschiedenen Koordinatensystemen annotieren

override func touchesMoved(_ touches: Set<UITouch>, 
          with event: UIEvent?) { 
    // 6 
    swiped = true 
    if let touch = touches.first { 
     let currentPoint = touch.location(in: pdfView.documentView) 
     drawLineFrom(fromPoint: lastPoint, toPoint: currentPoint) 
     addAnnotation(fromPoint: lastPoint, toPoint: currentPoint) 

     // 7 
     lastPoint = currentPoint 

    } 
} 

Doch wie Sie von meinem Bild unten (die schwarze Linie sehen kann, ist, wo ich den Bildschirm und die rote berühren Zeile ist, wo die Annotation gezeichnet wird). Das Berührungs-Koordinatensystem ist (0,0) oben links auf dem Bildschirm und das PDF ist von unten links (0,0) des Bildschirms annotiert.

iPad image inserted

Meine Add Anmerkungsfunktion ist wie folgt:

func addAnnotation(fromPoint: CGPoint, toPoint: CGPoint) { 

    let page = pdfView.document?.page(at: 0) 
    let bounds = CGRect(x: 0, y: 0, width: 600, height: 600) 
    let line = PDFAnnotation(bounds: bounds, forType: .line, withProperties: nil) 
    line.startPoint = fromPoint 
    line.endPoint = toPoint 
    line.startLineStyle = .none 
    line.endLineStyle = .none 
    line.color = .red 

    let border = PDFBorder() 
    border.lineWidth = 4.0 
    line.border = border 
    page?.addAnnotation(line) 
} 

Wie kann ich die Systeme ausrichten koordinieren, damit der Ort, wo ich auf dem Bildschirm berühren, wo die Anmerkung gezogen wird?

Antwort

3

Für diejenigen, die interessiert sind, löste ich dieses mit der folgenden Funktion, die mit dem Framework kommt, das einen Punkt vom Ansichtsraum in den Seitenraum konvertiert.

func convert(_ point: CGPoint, to page: PDFPage) -> CGPoint 

Hoffentlich wird dies einigen von Ihnen helfen.