0

我在具有捏合手势识别器的容器视图中有一个 PDFView。当我放大真实设备时,内存逐渐达到 2-3 GB 并崩溃。在 100 页样本 pdf 上,模拟器内存​​甚至不会超过 20mb。似乎是什么问题?

class ViewController: UIViewController {

    var containerView: UIView = UIView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.view.addSubview(containerView)
        containerView.frame = self.view.frame.insetBy(dx: 100, dy: 100)
        containerView.backgroundColor = .black
        
        loadPDF()
        addGesture()
    }

    var pdfView: CustomPDFView = CustomPDFView()
    func loadPDF() {
        containerView.addSubview(pdfView)
        pdfView.frame = CGRect(x: 50, y: 50, width: 400, height: 500)
        
        let pdfURL = Bundle.main.url(forResource: "A100page47", withExtension: "pdf")
        
        pdfView.autoresizesSubviews = true
        pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleTopMargin, .flexibleLeftMargin]
        pdfView.displayDirection = .vertical

        pdfView.autoScales = true
        pdfView.displayMode = .singlePage
        pdfView.displaysPageBreaks = false
        pdfView.pageShadowsEnabled = false
        pdfView.document = PDFDocument(url: pdfURL!)
        
        /// tryings for memory
        pdfView.interpolationQuality = .none
        pdfView.scalesLargeContentImage = false
        /// tryings for memory
    }

    func addGesture() {
        let gesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchHandler(_:)))
        containerView.addGestureRecognizer(gesture)
    }
    @objc func pinchHandler(_ gesture: UIPinchGestureRecognizer) {
        guard let view = gesture.view else { return }
        let scale = gesture.scale * 2
        view.transform = CGAffineTransform(scaleX: scale, y: scale)
        }
    }
}

CustomPDFView 是一个简单的“无缩放”类

lass CustomPDFView: PDFView {
    override func layoutSubviews() {
        super.layoutSubviews()
        self.minScaleFactor = self.scaleFactor
        self.maxScaleFactor = self.scaleFactor
    }
}
4

0 回答 0