Phát triển một đầu đọc PDF của iPad, chúng tôi quyết định chuẩn bị hình ảnh có độ phân giải cao để hiển thị các trang chuyên sâu (nhiều đường dẫn) và sử dụng chúng thay vì trang pdf để tránh các vấn đề về hiệu năng. Chúng tôi quyết định rằng 3*768 by 3*1024
là sự thỏa hiệp tốt giữa khả năng đọc và hiệu suất hiển thị kết quả là ~ 1,5 MB jpegs.Tại sao UIImageView lại tập trung nhiều hơn so với CGContextDrawImage
Tuy nhiên, chúng tôi đã thử nghiệm hai triển khai để hiển thị các trang hình ảnh. Một sử dụng lớp con CATiledLayer
cũng chịu trách nhiệm xử lý các trang PDF "bình thường" (vẽ với CGContextDrawImage
) và một trang khác sử dụng UIImageView
. Cách thứ hai có lợi thế là hiển thị và thu phóng rất nhanh, nhưng việc sử dụng bộ nhớ thực sự tồi tệ - mất khoảng 30 MB trong bộ nhớ (phù hợp với kích thước bitmap của hình ảnh). Cách tiếp cận khác (CATiledLayer
) cần nhiều thời gian hơn để hiển thị trang đầu tiên và cần thêm hai giây nữa để hiển thị lại sau khi phóng to (tương tự như trang pdf, nhưng nhanh hơn nhiều) nhưng không lấy nhiều bộ nhớ hơn mức cần hiển thị nhỏ hơn nhiều hình ảnh hoặc trang PDF.
Có ai biết điều gì đang diễn ra đằng sau hậu trường và nếu có thể kết hợp sử dụng bộ nhớ thấp CGContextDrawImage
với hiệu suất cao là UIImageView
bằng cách sử dụng khung thạch anh.
Cảm ơn bạn rất nhiều vì câu trả lời chi tiết và khai sáng này. Mặc dù, dự án tôi thực sự yêu cầu điều này được thực hiện, tôi chắc chắn rằng lời giải thích của bạn sẽ hữu ích cho các vấn đề sắp tới và - nếu không - nó chỉ là tốt để biết. –