亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

FAST和精益PDF查看器用于iPhone/iPad/IOS-提示和提示?

FAST和精益PDF查看器用于iPhone/iPad/IOS-提示和提示?

iOS
滄海一幻覺 2019-06-27 15:55:49
FAST和精益PDF查看器用于iPhone/iPad/IOS-提示和提示?最近有很多關于繪制PDF的問題。是的,您可以很容易地使用UIWebView但這不能給出您期望的良好PDF查看器的性能和功能。您可以繪制PDF頁面。給一個卡萊爾或到UIImage..蘋果甚至有示例代碼來展示如何繪制一個大的PDF在可縮放的UIScrollview中但同樣的問題不斷出現。UIImage方法:PDF在一個UIImage不要像用圖層法那樣進行光學縮放。CPU和內存在生成UIImages從PDFcontext限制/防止使用它來創建新的縮放級別的實時呈現。CATILedLayer法:有一個很大的開銷(時間)將完整的PDF頁繪制到CALayer:可以看到單個瓷磚的呈現(即使是平鋪大小的調整)。CALayers不能提前準備(在屏幕外呈現)。一般來說,PDF閱讀器的內存也很重。甚至監控蘋果的可縮放PDF示例的內存使用情況。在我當前的項目中,我正在開發一個PDF查看器,并呈現一個UIImage一個單獨的線程中的頁面(這里也有問題!)在刻度為x1的時候呈現出來。CATiledLayer一旦渲染的比例大于1,iBooks就會采用類似的雙取方式,就像滾動頁面一樣,在清晰的版本出現之前,您可以在不到一秒鐘的時間內看到頁面的較低分辨率版本。我呈現每頁2頁的焦點,這樣PDF圖像就可以在開始繪圖之前掩蓋圖層,當頁面離焦點頁面+2頁時,頁面就會再次被銷毀。有沒有人有任何洞察力,無論多小或多明顯,都能提高PDF的性能/內存處理能力嗎?或者這里討論的其他問題?編輯:一些小貼士(信用-盧克·麥克奈斯,維德梅德·T,馬特·加拉格爾,約翰):可以時將任何媒體保存到磁盤。如果在平鋪上渲染,請使用更大的平鋪尺寸在經常使用占位符對象的數組中,另一種設計方法是這一個注意,圖像呈現速度比CGPDFPageRef使用NSOperations或GCD&砌塊提前準備頁面。打電話CGContextSetInterpolationQuality(ctx, kCGInterpolationHigh); CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);以前CGContextDrawPDFPage減少繪圖時的內存使用在你的NSOperations使用docRef是個壞主意(內存),將docRef包裝成一個單例。取消不必要NSOperations當你可以的時候,特別是如果他們要使用內存的話,小心不要讓上下文打開!回收頁面對象并銷毀未使用的視圖在不需要任何開放上下文時立即關閉它們接收內存警告釋放和重新加載DocRef和任何頁面緩存其他PDF功能:獲取PDF中的鏈接(和這里和這里)理解用于鏈接定位的PDF RECT轉換PDF annot日期字符串獲取鏈接的目標(從/Dest(數組)得到一張目錄文件標題和關鍵詞獲取原始文本(和這里和這里和這里(定位重點)搜索(和這里)(并非所有PDF都有效(有些只顯示奇怪的字符,我想這是編碼問題,但我不確定)-CreditBrainfeed)CA層和離屏渲染-渲染下一頁以快速/平滑顯示文獻資料石英PDFObjects(用于元信息、注釋、拇指)以上PDF規格示例項目蘋果/ZoomingPDF-放大,UIScrollView, CATiledLayerVFR/閱讀器-放大,尋呼,UIScrollView, CATiledView眉/葉-具有良好過渡的分頁脫脂-看上去的一切(OSX的PDF閱讀器/編輯器)
查看完整描述

3 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

我使用近似相同的方法構建了這樣的應用程序,除了:

  • 我將生成的映像緩存在磁盤上,并且總是在一個單獨的線程中預先生成兩到三個映像。
  • 我不會用

    UIImage

    但是,當縮放為1時,則在圖層中繪制圖像。當發出內存警告時,這些瓷磚將自動釋放。

每當用戶開始縮放時,我將獲取CGPDFPage并使用適當的CTM進行渲染。代碼- (void)drawLayer: (CALayer*)layer inContext: (CGContextRef) context就像:

CGAffineTransform currentCTM = CGContextGetCTM(context);    if (currentCTM.a == 1.0 && baseImage) {
    //Calculate ideal scale
    CGFloat scaleForWidth = baseImage.size.width/self.bounds.size.width;
    CGFloat scaleForHeight = baseImage.size.height/self.bounds.size.height; 
    CGFloat imageScaleFactor = MAX(scaleForWidth, scaleForHeight);

    CGSize imageSize = CGSizeMake(baseImage.size.width/imageScaleFactor, baseImage.size.height/imageScaleFactor);
    CGRect imageRect = CGRectMake((self.bounds.size.width-imageSize.width)/2, (self.bounds.size.height-imageSize.height)/2, imageSize.width, imageSize.height);
    CGContextDrawImage(context, imageRect, [baseImage CGImage]);} else {
    @synchronized(issue) { 
        CGPDFPageRef pdfPage = CGPDFDocumentGetPage(issue.pdfDoc, pageIndex+1);
        pdfToPageTransform = CGPDFPageGetDrawingTransform(pdfPage, kCGPDFMediaBox, layer.bounds, 0, true);
        CGContextConcatCTM(context, pdfToPageTransform);    
        CGContextDrawPDFPage(context, pdfPage);
    }}

問題的對象是CGPDFDocumentRef..同步訪問pdfDoc屬性,因為我在接收內存警告時釋放它并重新創建它。似乎CGPDFDocumentRef對象執行一些我沒有找到的內部緩存。


查看完整回答
反對 回復 2019-06-27
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

iOS 11,您可以使用名為PDFKit用于顯示和操作PDF。

導入PDFKit之后,應該初始化PDFView使用本地或遠程URL,并將其顯示在視圖中。

if let url = Bundle.main.url(forResource: "example", withExtension: "pdf") {
    let pdfView = PDFView(frame: view.frame)
    pdfView.document = PDFDocument(url: url)
    view.addSubview(pdfView)}

在Apple Developer文檔中閱讀更多關于PDFKit的信息。


查看完整回答
反對 回復 2019-06-27
  • 3 回答
  • 0 關注
  • 421 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號