在draw(_ :)方法中将PDFPage绘制到UIView子类(缩放/转换以适合rect不能正常工作)

时间:2018-04-06 07:36:55

标签: ios swift pdfkit

我试图将PDFPage绘制到UIView子类的上下文中:

class PDFPageView: UIView {

    private let page: PDFPage

    init(frame: CGRect, page: PDFPage) {
        self.page = page
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError()
    }

    override func draw(_ rect: CGRect) {
        guard let context = UIGraphicsGetCurrentContext() else { return }

        // This scales the page correctly (ignoring aspect ratios for now, though)
        let bounds = page.bounds(for: .mediaBox)
        context.scaleBy(x: rect.width / bounds.width, y: rect.height / bounds.height)

        // This has no effect when I use it (?)
        // page.transform(context, for: .mediaBox)


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

它正在绘制一些东西,但它是镜像的(垂直),我不知道如何纠正这个问题。我认为page.transform(context, for: .mediaBox)应该做所有事情,以便上下文正确地呈现页面。但奇怪的是,它没有任何作用。

我尝试手动设置比例。它起作用,但仅限于正值。如果我尝试设置负x刻度或y刻度(以补偿镜像),我的设备上只会出现黑屏。

我不知道该怎么做。此外,它只适用于某些pdf。我想给你看一个截图,所以我创建了一个小的pdf文件(我用于测试的文件是受版权保护的,我认为)并将其加载到应用程序中。但我也只是黑屏。

我真的很感激任何帮助。

谢谢

编辑:好的,我有点工作了。在将y轴缩放负值后,我需要使用context.translateBy(x: 0, y: rect.height)翻译上下文。然后它被正确呈现。

但是,为什么page.transform(context, for: .mediaBox)不这样做呢?并且垂直翻转对每个 pdf页面有效的上下文?

0 个答案:

没有答案