kernelpanic
kernelpanic

Reputation: 530

Swift 4 - NSGraphicsContext.setCurrent() has no member 'setCurrent'

So I am trying to overlay text onto a PDF document using a similar method to this answer.

I use a function to set the current Graphics Context, like it says to in the documentation.

let pdfPage: CGPDFPage = pdf.page(at: 1)!
            //var pageRect = pdfPage.getBoxRect(CGPDFBox.mediaBox)
            //print(pageRect)

            let doc: PDFDocument = PDFDocument(url: pdfURL!)!
            let page: PDFPage = doc.page(at: 0)!
            var mediaBox: CGRect = page.bounds(for: .mediaBox)

            let context = CGContext(destinationURL as CFURL, mediaBox: &mediaBox, nil)
            let graphicsContext = NSGraphicsContext(cgContext: context!, flipped: false)
            NSGraphicsContext.setCurrent(graphicsContext)

            context!.beginPDFPage(nil)

            page.draw(with: .mediaBox, to: context!)

            let style = NSMutableParagraphStyle()
            style.alignment = .center

            let richText = NSAttributedString(string: "Hello, world!", attributes: [
                NSAttributedStringKey.font: NSFont.systemFont(ofSize: 64),
                NSAttributedStringKey.foregroundColor: NSColor.red,
                NSAttributedStringKey.paragraphStyle: style
                ])

            let richTextBounds = richText.size()
            let point = CGPoint(x: mediaBox.midX - richTextBounds.width / 2, y: mediaBox.midY - richTextBounds.height / 2)

            context!.saveGState()
            do {
                context!.translateBy(x: point.x, y: point.y)
                context!.rotate(by: .pi / 5)
                richText.draw(at: .zero)
            }
            context!.restoreGState()



            context!.endPDFPage()
            NSGraphicsContext.setCurrent(nil)
            context?.closePDF()
        }

And the line:

NSGraphicsContext.setCurrent(graphicsContext)

Throws an error that says "Type 'NSGraphicsContext' has no member 'setCurrent'"

Anyone have any ideas on what's going on? Is there something I'm missing in terms of a framework?

Upvotes: 2

Views: 964

Answers (1)

rmaddy
rmaddy

Reputation: 318774

You need to use the current class property.

NSGraphicsContext.current = graphicsContext

Upvotes: 4

Related Questions