我在具有捏合手势识别器的容器视图中有一个 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
}
}