版本記錄
版本號 | 時(shí)間 |
---|---|
V1.0 | 2021.03.22 星期一 |
前言
QuickLook框架提供了文檔的預(yù)覽功能残家。接下來幾篇我們就一起看一下這個(gè)框架激蹲。感興趣的可以看下面幾篇夯膀。
1. QuickLook框架詳細(xì)解析(一) —— 基本概覽(一)
2. QuickLook框架詳細(xì)解析(二) —— QuickLook 預(yù)覽簡單示例(一)
3. QuickLook框架詳細(xì)解析(三) —— QuickLook 預(yù)覽簡單示例(二)
開始
首先看下寫作內(nèi)容:
了解如何構(gòu)建自己的
Quick Look
預(yù)覽和縮略圖擴(kuò)展名以在iOS中顯示自定義文件類型鲸匿。內(nèi)容來自翻譯逗抑。
下面就是寫作環(huán)境:
Swift 5, iOS 14, Xcode 12
接著就是正文啦弦疮。
您可能會(huì)發(fā)現(xiàn)自己想要在應(yīng)用程序中顯示文件的縮略圖夹攒,或者甚至想要顯示文件本身的更豐富的預(yù)覽。 幸運(yùn)的是胁塞,QuickLook
框架使您可以輕松生成縮略圖并顯示許多標(biāo)準(zhǔn)文件類型的預(yù)覽咏尝。
雖然這對標(biāo)準(zhǔn)文件類型非常有用,但是如果您的應(yīng)用程序?qū)W⒂?code>QuickLook不能涵蓋的特定文件類型啸罢,該怎么辦编检?好吧,不要害怕扰才。借助iOS 13
中引入的Quick Look previews
和thumbnail extension
點(diǎn)允懂,您可以在自己的應(yīng)用程序以及也使用QuickLook
的同一設(shè)備上的任何其他應(yīng)用程序中為自定義文件類型提供自定義預(yù)覽和縮略圖。
注意:您會(huì)看到兩種形式的間距形式训桶,都用于后端QuickLook framework(不帶空格)和面向用戶的Quick Look(帶空格)累驮。名稱中的空格規(guī)則似乎很復(fù)雜,因此我們努力做到平衡舵揭。
在本教程中谤专,您將學(xué)習(xí)如何:
- 使用
QLThumbnailGenerator
生成縮略圖 - 為您的自定義文件格式定義并導(dǎo)出您自己的
document type
- 構(gòu)建自己的
Quick Look preview extension
- 構(gòu)建自己的
Thumbnail extension
- 調(diào)試您在擴(kuò)展
extension
程序中運(yùn)行的代碼
為此,您將使用RazeThumb
午绳,該應(yīng)用程序顯示文件列表并在點(diǎn)按時(shí)顯示每個(gè)文件的Quick Look
預(yù)覽置侍。您將增強(qiáng)該應(yīng)用程序,以使用QuickLook
顯示代表列表中每個(gè)文件的縮略圖拦焚。最后蜡坊,您將為您的自定義.thumb
文件類型添加Quick Look preview extension
和 Thumbnail extension
,并在app
和Files
應(yīng)用程序中看到它赎败。
打開下載項(xiàng)目材料秕衙。然后在啟動(dòng)程序文件夾中打開RazeThumb.xcodeproj
。
RazeThumb
是一個(gè)簡單的文檔瀏覽應(yīng)用程序僵刮。它預(yù)裝了各種包含縮略圖的文件類型据忘。六種格式中的五種是標(biāo)準(zhǔn)文件類型鹦牛。第六種是自定義文件類型,稱為.thumb
文件勇吊。
構(gòu)建并運(yùn)行:
該應(yīng)用程序顯示六種不同文件類型的列表曼追,每種文件類型均帶有一個(gè)占位符文檔圖標(biāo)。 輕按每個(gè)文件將顯示QLPreviewController
汉规,它顯示文件的預(yù)覽礼殊。 這就是目前所做的全部,但是您將在不斷改進(jìn)該應(yīng)用程序针史。
Adding Quick Look Thumbnails
您要做的第一件事就是增強(qiáng)RazeThumb
晶伦,以使用每種文件類型的縮略圖。 當(dāng)前悟民,RazeThumb
為每個(gè)文件顯示一個(gè)通用文檔圖標(biāo)坝辫。 QuickLook
框架為各種文件類型提供縮略圖篷就,包括圖像射亏,PDF,音頻和視頻竭业。 請查看Apple的文檔Apple’s documentation智润,以獲取有關(guān)Apple支持的其他文件類型的更多詳細(xì)信息。 如果QuickLook
無法識別文件類型未辆,它仍會(huì)創(chuàng)建某種占位符縮略圖窟绷。 將縮略圖添加到應(yīng)用后,您將學(xué)到更多有關(guān)此的知識咐柜。
現(xiàn)在兼蜈,是時(shí)候開始修飾RazeThumb
了。
打開Document.swift
并將import Foundation
更改為:
import QuickLook
在文件底部拙友,粘貼以下擴(kuò)展名:
// MARK: - QLThumbnailGenerator
extension Document {
func generateThumbnail(
size: CGSize,
scale: CGFloat,
completion: @escaping (UIImage) -> Void
) {
if let thumbnail = UIImage(systemName: "doc") {
completion(thumbnail)
}
}
}
上面的代碼是異步縮略圖生成方法的占位符为狸。 現(xiàn)在,它返回文檔系統(tǒng)圖標(biāo)的UIImage
遗契。 稍后辐棒,您將替換為對QuickLook
框架的請求以生成縮略圖。
接下來牍蜂,打開DocumentThumbnailView.swift
并將以下代碼直接粘貼到.groupBoxStyle(PlainGroupBoxStyle())
下面:
.onAppear {
document.generateThumbnail(
size: thumbnailSize,
scale: displayScale
) { uiImage in
DispatchQueue.main.async {
self.thumbnail = Image(uiImage: uiImage)
}
}
}
上面的代碼等待視圖出現(xiàn)漾根。 然后,它要求為每個(gè)文件提供縮略圖UIImage
鲫竞。 UIImage
到達(dá)后辐怕,視圖將使用主線程更新SwiftUI
圖像Image
。 這是所有用戶界面更新所必需的从绘。
構(gòu)建并運(yùn)行:
您會(huì)看到每個(gè)文件的文檔圖標(biāo)現(xiàn)在要小得多寄疏。 這是因?yàn)槟鷽]有調(diào)整圖像的大小其做。 但是很快,QuickLook
框架將為您處理大小調(diào)整赁还。
1. Generating a Quick Look thumbnail
要從QuickLook
框架中獲取縮略圖妖泄,您需要使用QLThumbnailGenerator
創(chuàng)建一個(gè)QLThumbnailGenerator.Request
并執(zhí)行請求。 再次打開Document.swift
艘策,并用以下代碼替換generateThumbnail(size:scale:completion :)
的內(nèi)容:
// 1
let request = QLThumbnailGenerator.Request(
fileAt: url,
size: size,
scale: scale,
representationTypes: .all)
// 2
let generator = QLThumbnailGenerator.shared
generator.generateRepresentations(for: request) { thumbnail, _, error in
// 3
if let thumbnail = thumbnail {
print("\(name) thumbnail generated")
completion(thumbnail.uiImage)
} else if let error = error {
print("\(name) - \(error)")
}
}
在上面的代碼中蹈胡,您將執(zhí)行以下操作:
- 1) 使用視圖提供的大小和比例以及定義的表示形式類型,創(chuàng)建一個(gè)新的
QLThumbnailGenerator.Request
朋蔫。 可用的表示形式為.icon罚渐,.lowQualityThumbnail
和.thumbnail
。 在這種情況下驯妄,您需要全部請求并使用最佳選擇荷并。 如果使用所有格式的速度太慢,則可以指定一種格式青扔。 - 2) 使用
.shared
生成器源织,您可以啟動(dòng)請求并等待提供縮略圖。 - 3) 如果
generator
在完成閉包中傳遞了圖像微猖,則將其傳遞回視圖谈息。 如果收到錯(cuò)誤,請打印錯(cuò)誤消息凛剥。 請記住侠仇,generator
最多可以返回三個(gè)不同的圖像,因?yàn)樵撜埱筮m用于所有表示形式犁珠。
構(gòu)建并運(yùn)行:
現(xiàn)在逻炊,您將看到每種文件類型的縮略圖。 不幸的是犁享,QuickLook
對.thumb
文件一無所知余素,因此其縮略圖為空白。
2. Searching messages printed in the Console
現(xiàn)在饼疙,查看“調(diào)試”區(qū)域中的消息溺森。 每個(gè)縮略圖有三種可能的表示形式,因此控制臺(tái)中針對每個(gè)顯示的文檔有三則消息窑眯。
在“調(diào)試”區(qū)域右下角的Filter
字段中屏积,鍵入.html
。 您會(huì)看到三則消息 —— 一則消息顯示縮略圖已生成磅甩,兩則消息顯示失敗炊林。 這是正常現(xiàn)象卷要,在要求所有表示時(shí)您可以忽略這一點(diǎn)渣聚。 要求所有表示的好處是您將獲得至少一個(gè)可以使用的代表独榴。
現(xiàn)在刪除.html
并輸入.pdf
。 對于PDF
文件奕枝,QuickLook
生成了兩個(gè)縮略圖棺榔。 DocumentThumbnailView
顯示占位符文檔圖標(biāo),然后使用生成的縮略圖對其進(jìn)行兩次更新隘道。 使用所有表示形式的權(quán)衡是多次更新視圖的額外工作症歇。
替換.pdf
并鍵入.thumb
。 盡管QuickLook
對縮略文件一無所知谭梗,但它至少為您提供了一個(gè)縮略圖忘晤,盡管它是空白的。
現(xiàn)在激捏,花點(diǎn)時(shí)間檢查框架生成的不同縮略圖设塔。 文件zombiethumb.jpg
,humanthumb.pdf
和thumbsup.txt
生成了文件內(nèi)容的精美縮略圖远舅。 Markdown
文件thumbsdown.md
的縮略圖以文本形式呈現(xiàn)闰蛔,因?yàn)樵摽蚣懿恢С?code>Markdown展示。
thumbsdown.html
文件將一個(gè)通用的HTML
圖標(biāo)作為其縮略圖表谊,因?yàn)榭蚣茉O(shè)計(jì)者認(rèn)為渲染HTML
以生成實(shí)際的縮略圖效果不佳钞护。
最后盖喷,您已經(jīng)發(fā)現(xiàn)爆办,greenthumb.thumb
縮略圖是空白圖像。但是不用擔(dān)心课梳;您將很快解決該問題距辆。
生成縮略圖,給自己一個(gè)很大的“豎起大拇指”暮刃。接下來做下一個(gè)事情跨算。
Defining and Exporting a Document Type
那么,為什么.thumb
文件沒有縮略圖椭懊?好吧诸蚕,第一個(gè)問題是系統(tǒng)不知道如何將此文件擴(kuò)展名映射到文檔類型。系統(tǒng)使用Uniform Type Identifiers定義已知的數(shù)據(jù)格式氧猬,同時(shí)還允許您定義自己的專有格式背犯,例如.thumb
。您可以按照相同的步驟在將來的項(xiàng)目中實(shí)現(xiàn)新的文件類型盅抚。
1. Defining a Document Type
請按照以下步驟定義新的文檔類型:
- 在項(xiàng)目導(dǎo)航器中漠魏,選擇頂部的
RazeThumb
項(xiàng)目圖標(biāo)。 - 在
Targets
下選擇RazeThumb target
妄均。 - 選擇
target
上方的Info
標(biāo)簽柱锹。 - 單擊
Document Types
旁邊的顯示三角形以展開該部分哪自。 - 顯示時(shí)單擊
+
。
使用以下詳細(xì)信息填寫新的文檔類型:
- 將
Name
設(shè)置為Thumb File
禁熏。 - 將
Types
設(shè)置為com.raywenderlich.rwthumbfile
壤巷。 - 將
Handler Rank
設(shè)置為Owner
,因?yàn)榇藨?yīng)用是該文件類型的所有者瞧毙。 - 單擊顯示
Click here to add additional document type properties
隙笆。 - 將
Key
設(shè)置為CFBundleTypeRole
。 - 將
Type
保留為String
升筏。 - 輸入編輯器的值
Value
撑柔。
查看您的設(shè)置。 它們應(yīng)符合以下顯示的內(nèi)容:
2. Exporting a Document Type
既然您已經(jīng)告訴系統(tǒng)您的應(yīng)用擁有.thumb
文檔類型您访,則需要將其導(dǎo)出铅忿,以便其他應(yīng)用可以識別.thumb
文件。 這是執(zhí)行此操作的步驟:
- 單擊
Exported Type Identifiers
旁邊的顯示三角形灵汪。 - 點(diǎn)擊顯示的
+
檀训。 - 對于
Description
,鍵入Thumb File
享言。 - 對于
Identifier
峻凫,鍵入com.raywenderlich.rwthumbfile
- 對于
Conforms To
,鍵入public.data览露,public.content
荧琼。 - 對于
Extensions
,鍵入thumb
差牛,這是此新文件類型的文件擴(kuò)展名命锄。
仔細(xì)檢查您的設(shè)置是否符合以下顯示的內(nèi)容:
構(gòu)建并運(yùn)行
在縮略圖上查看greenthumb.thumb
。 通過添加和導(dǎo)出文檔類型信息偏化,您使iOS
知道了.thumb
文件類型脐恩。 默認(rèn)情況下,QuickLook
框架會(huì)將應(yīng)用程序圖標(biāo)(如您在主屏幕上看到的那樣)用作縮略圖侦讨,因?yàn)榇藨?yīng)用程序擁有該文件類型驶冒。 因此,RazeThumb
應(yīng)用程序圖標(biāo)現(xiàn)在顯示為系統(tǒng)上所有.thumb
文件的縮略圖韵卤。 再給自己豎起大拇指骗污!
Quick Look Extensions
因此,現(xiàn)在RazeThumb
使用QuickLook
框架為每個(gè)文件提供縮略圖怜俐,如果您一個(gè)一個(gè)地點(diǎn)擊每個(gè)文件身堡,您還將看到每個(gè)文件的豐富預(yù)覽,直到進(jìn)入greenthumb.thumb
為止:
現(xiàn)在該看看如何利用iOS 13
中引入的新擴(kuò)展點(diǎn)來改善.thumb
文件的使用體驗(yàn)拍鲤。
1. Adding a Quick Look preview extension
Quick Look
預(yù)覽擴(kuò)展程序使您的應(yīng)用程序可以使用完全自定義的視圖控制器替換上述無聊的預(yù)覽贴谎。 RazeThumb
不僅可以利用您的擴(kuò)展名汞扎,而且使用已安裝的擴(kuò)展名預(yù)覽.thumb
文件,所有安裝的其他應(yīng)用程序都將受益擅这。
要將擴(kuò)展添加到項(xiàng)目中澈魄,請按照下列步驟操作:
- 在項(xiàng)目導(dǎo)航器中選擇
RazeThumb
項(xiàng)目。 - 在列出
Targets
的窗口底部仲翎,單擊+
圖標(biāo)痹扇。 - 在
Preview
中鍵入Filter
。 - 雙擊
Quick Look Preview Extension
溯香,并將其命名為ThumbFilePreview
鲫构。 - 單擊
Finish
。 - 如果出現(xiàn)提示玫坛,請不要立即激活新的
ThumbFilePreview scheme
结笨。
RazeThumb
應(yīng)用程序的Sources
文件夾中有兩個(gè)文件,您的新擴(kuò)展程序?qū)⒃谏深A(yù)覽時(shí)使用這些文件湿镀。 您將使用ThumbFile.swift
來加載Thumb
文件炕吸,并使用ThumbFileViewController.swift
將ThumbFile
的實(shí)例作為預(yù)覽呈現(xiàn)。
為確保這些文件也包含在新創(chuàng)建的ThumbFilePreview target
中勉痴,請按照下列步驟操作:
- 在
Project navigator
中選擇ThumbFile.swift
赫模。 - 打開
Xcode
右側(cè)的Inspectors
,然后單擊文檔圖標(biāo)以顯示File inspector
蒸矛。 - 在
Target Membership
部分下瀑罗,選中該框以將文件包括在ThumbFilePreview
和RazeThumb
目標(biāo)中。 - 在項(xiàng)目導(dǎo)航器中選擇
ThumbFileViewController.swift
莉钙,然后重復(fù)上述步驟以再次更Target Membership
資格廓脆。
在項(xiàng)目導(dǎo)航器中,展開新的ThumbFilePreview
組磁玉。 Xcode
添加了名為PreviewViewController.swift,MainInterface.storyboard
和Info.plist
的文件驾讲。 這些是構(gòu)成擴(kuò)展名的文件蚊伞。
2. Invoking a Quick Look Preview Extension
現(xiàn)在,要正確調(diào)用擴(kuò)展程序吮铭,您需要將其與.thumb
文件類型相關(guān)聯(lián)时迫。 為此,請按照以下步驟操作:
- 打開
ThumbFilePreview / Info.plist
谓晌。 - 通過按住
Option
鍵單擊旁邊的顯示三角形掠拳,展開NSExtension
條目及其所有子條目。 - 將鼠標(biāo)懸停在
QLSupportedContentTypes
上纸肉,然后單擊出現(xiàn)的+
溺欧,在其下方添加一個(gè)項(xiàng)喊熟。 - 將
Item 0
設(shè)置為String
,并為其賦予com.raywenderlich.rwthumbfile
值姐刁,該值與您之前添加的文檔類型標(biāo)識符匹配芥牌。
現(xiàn)在,系統(tǒng)知道何時(shí)調(diào)用您的擴(kuò)展程序聂使,您需要自定義擴(kuò)展程序提供的預(yù)覽壁拉。 打開PreviewViewController.swift
并將其內(nèi)容替換為以下內(nèi)容:
import UIKit
import QuickLook
// 1
class PreviewViewController: ThumbFileViewController, QLPreviewingController {
// 2
enum ThumbFilePreviewError: Error {
case unableToOpenFile(atURL: URL)
}
func preparePreviewOfFile(
at url: URL,
completionHandler handler: @escaping (Error?) -> Void
) {
// 3
guard let thumbFile = ThumbFile(from: url) else {
handler(ThumbFilePreviewError.unableToOpenFile(atURL: url))
return
}
// 4
self.thumbFile = thumbFile
// 5
handler(nil)
}
}
這是您在上面的代碼中所做的事情:
- 1) 不是從
UIViewController
繼承,而是從ThumbFileViewController
繼承柏靶,ThumbFileViewController
是已經(jīng)知道如何通過分配thumbFile
屬性來顯示ThumbFile
的視圖控制器弃理。 - 2) 聲明一個(gè)簡單的錯(cuò)誤類型,該錯(cuò)誤類型可以通知
QuickLook
加載失敗屎蜓。 - 3) 在
preparePreviewOfFile(at:completionHandler :)
內(nèi)部案铺,嘗試從指定位置加載ThumbFile
,并在失敗時(shí)返回錯(cuò)誤梆靖。 - 4) 更新視圖控制器以顯示剛剛加載的縮略圖控汉。
- 5) 通過傳遞
nil
錯(cuò)誤,通知提供的處理程序預(yù)覽已成功完成加載返吻。
最后姑子,在再次運(yùn)行該應(yīng)用程序之前,打開ThumbFilePreview / MainInterface.storyboard
并刪除默認(rèn)情況下添加的“Hello World”
標(biāo)簽测僵。
構(gòu)建并運(yùn)行街佑,然后單擊greenthumb.thumb
以調(diào)用您的擴(kuò)展程序:
恭喜你!由于上述工作捍靠,QuickLook
框架可以加載您的擴(kuò)展名并生成.thumb
文件的更好預(yù)覽沐旨。再給自己豎起大拇指!
3. Adding a Thumbnail Extension
現(xiàn)在RazeThumb
可以渲染一個(gè)thumb
文件了榨婆,是時(shí)候從該渲染中生成縮略圖了磁携。為此,您可以通過將縮略圖擴(kuò)展名添加到項(xiàng)目中的方式良风,類似于添加最后一個(gè)擴(kuò)展名的方式谊迄。
QuickLook
框架使用縮略圖擴(kuò)展名來創(chuàng)建自定義文件類型的縮略圖,然后通過QLThumbnailGenerator
將其返回到RazeThumb
以及設(shè)備上的任何其他應(yīng)用程序烟央。首先统诺,請按照以下步驟添加下一個(gè)擴(kuò)展名:
- 在
Project navigator
中選擇RazeThumb
項(xiàng)目。 - 在列出
Targets
的窗口底部疑俭,單擊+
圖標(biāo)粮呢,然后在Filter
中鍵入Thumbnail
。 - 雙擊
Thumbnail Extension
,并將其命名為ThumbFileThumbnail
啄寡。 - 單擊
Finish
豪硅。 - 如果出現(xiàn)提示,請不要立即激活新的
ThumbFileThumbnail scheme
这难。
在Project navigator
中舟误,展開新的ThumbFileThumbnail
組。Xcode
已添加ThumbnailProvider.swift
和Info.plist
姻乓。這些是構(gòu)成擴(kuò)展名的文件嵌溢。
4. Invoking a Thumbnail extension
為了調(diào)用Thumbnail
擴(kuò)展名,您需要將此縮略圖擴(kuò)展名與.thumb
文件類型相關(guān)聯(lián)蹋岩,就像使用預(yù)覽擴(kuò)展名一樣赖草。
- 打開
ThumbFileThumbnail
擴(kuò)展文件夾中的Info.plist
文件。 - 通過按住
Option
鍵單擊旁邊的顯示三角形剪个,展開NSExtension
條目及其所有子條目秧骑。 - 將鼠標(biāo)懸停在
QLSupportedContentTypes
上,然后單擊出現(xiàn)的+
扣囊,在其下方添加一個(gè)item
乎折。 - 將
Item 0
設(shè)置為String
,并為其賦予com.raywenderlich.rwthumbfile
值侵歇,該值與您之前添加的文檔類型標(biāo)識符(document type identifier)
匹配骂澄。 - 可選,您還可以使用
QLThumbnailMinimumDimension
為縮略圖指定最小尺寸(以點(diǎn)為單位)惕虑。如果縮略圖在Internet
瀏覽器選項(xiàng)卡中顯示為像收藏夾中的小圖標(biāo)坟冲,則您可能想使用緩存的縮略圖(例如默認(rèn)的應(yīng)用程序圖標(biāo)),而不是生成的縮略圖(例如markdown
文字)溃蔫,因?yàn)榭s略圖可能太復(fù)雜而無法識別小尺寸健提。在此應(yīng)用中,您將不會(huì)使用最小尺寸功能伟叛。
與ThumbFilePreview target
目標(biāo)一樣私痹,ThumbFileThumbnail target
也將使用ThumbFile.swift
和ThumbFileViewController.swift
。 按照之前的相同步驟痪伦,在Project navigator
中選擇兩個(gè)快速文件侄榴,并通過在File inspector
中選中相應(yīng)的復(fù)選框,將其target memberships
更新為包括ThumbFileThumbnail
网沾。
接下來,打開ThumbnailProvider.swift
并將文件內(nèi)容替換為以下內(nèi)容:
import UIKit
import QuickLookThumbnailing
class ThumbnailProvider: QLThumbnailProvider {
// 1
enum ThumbFileThumbnailError: Error {
case unableToOpenFile(atURL: URL)
}
// 2
override func provideThumbnail(
for request: QLFileThumbnailRequest,
_ handler: @escaping (QLThumbnailReply?, Error?) -> Void
) {
// 3
guard let thumbFile = ThumbFile(from: request.fileURL) else {
handler(
nil,
ThumbFileThumbnailError.unableToOpenFile(atURL: request.fileURL))
return
}
// 4
DispatchQueue.main.async {
// 5
let image = ThumbFileViewController.generateThumbnail(
for: thumbFile,
size: request.maximumSize)
// 6
let reply = QLThumbnailReply(contextSize: request.maximumSize) {
image.draw(in: CGRect(origin: .zero, size: request.maximumSize))
return true
}
// 7
handler(reply, nil)
}
}
}
這里涉及一些步驟:
- 1) 定義一個(gè)簡單的錯(cuò)誤類型蕊爵,如果需要辉哥,可以將任何失敗描述回
QLThumbnailProvider
。 - 2) 覆蓋
ProvideThumbnail(for:_)
,以便您可以加載ThumbFile
并為QuickLookThumbnailing
框架呈現(xiàn)其縮略圖醋旦。 - 3) 嘗試失敗時(shí)嘗試加載
ThumbFile
并使用錯(cuò)誤調(diào)用處理程序恒水。 - 4)
QuickLookThumbnailing
框架在后臺(tái)線程上調(diào)用此方法。但是為了在屏幕上繪制用戶界面饲齐,您必須位于主線程中钉凌。 - 5) 使用
ThumbFileViewController
中的一些現(xiàn)有代碼,使用正確的尺寸構(gòu)造預(yù)覽的UIImage
表示形式捂人。 - 6) 使用生成的縮略圖御雕,創(chuàng)建一個(gè)
QLThumbnailReply
對象,該對象將圖像縮略圖繪制到提供的上下文中滥搭。 - 7) 使用回復(fù)對象和
nil
錯(cuò)誤來調(diào)用處理程序酸纲,以指示成功。
注意:在此示例中瑟匆,您調(diào)度到主隊(duì)列,因?yàn)?code>ThumbFileViewController.generateThumbnail(for:size :)在內(nèi)部使用
UIGraphicsImageRenderer
(需要使用主線程)。在其他情況下娃肿,您可能直接使用其他繪圖API(例如CoreGraphics
)豪嗽,則可能不需要這樣做。
構(gòu)建并運(yùn)行∶嵯螅現(xiàn)在代承,您應(yīng)該會(huì)看到greenthumb.thumb
的縮略圖,看起來像是預(yù)覽的微型版本交惯。
祝賀您兩個(gè)偉大的大拇指次泽! RazeThumb
應(yīng)用程序已完成。
Trying Out Your Extensions Using the Files App
現(xiàn)在席爽,您已經(jīng)為.thumb
文件創(chuàng)建了預(yù)覽擴(kuò)展名和縮略圖擴(kuò)展名意荤,其他應(yīng)用程序?qū)⒖梢允褂迷撐募愋汀T诒静糠种兄欢停梢酝ㄟ^向模擬器添加.thumb
文件并使用Files
應(yīng)用程序?yàn)g覽到該文件來表明擴(kuò)展程序支持其他應(yīng)用程序玖像。
以下是將縮略圖文件添加到模擬器的步驟:
- 1) 從模擬器中刪除
RazeThumb
。這是因?yàn)槟M器會(huì)在收到拇指文件后啟動(dòng)RazeThumb
齐饮,但RazeThumb
不會(huì)保存文件捐寥。將文件復(fù)制到模擬器后,您將重新安裝該應(yīng)用程序祖驱。 - 2) 將
greenthumb.thumb
從Xcode
或Finder
拖到模擬器應(yīng)用程序中握恳。這將打開Files
應(yīng)用程序以導(dǎo)入文件。選擇將文件保存在On My iPhone
上捺僻。 - 3) 點(diǎn)擊
Save
返回瀏覽乡洼。 - 4) 如果選擇了
Recents
選項(xiàng)卡崇裁,請依次單擊Browse
和On My iPhone
以查看剛添加的文件。
由于您刪除了RazeThumb
束昵,因此您將不會(huì)看到縮略圖拔稳,并且如果打開文件,則不會(huì)看到預(yù)覽锹雏。
在Xcode
中巴比,構(gòu)建并運(yùn)行RazeThumb
以將其重新安裝到模擬器上。安裝RazeThumb
將重新建立縮略圖文件和RazeThumb
之間的關(guān)聯(lián)礁遵。這是因?yàn)?code>RazeThumb包括縮略圖文件的預(yù)覽和縮略圖擴(kuò)展名轻绞。
在模擬器中打開Files
應(yīng)用程序:
點(diǎn)按On My iPhone
,您將看到縮略圖文件的渲染縮略圖榛丢。點(diǎn)擊greenthumb.thumb
铲球,文件將呈現(xiàn)其預(yù)覽,就像在RazeThumb
應(yīng)用程序中一樣晰赞。多么酷凹诓 ?
Attaching the Debugger to Your Extension
Quick Look
預(yù)覽擴(kuò)展和縮略圖擴(kuò)展過程與主應(yīng)用程序分開運(yùn)行掖鱼。它們一起安裝時(shí)然走,它們是完全隔離的,這使系統(tǒng)可以在Quick Look
框架中有效地使用它們戏挡,以在設(shè)備上安裝的其他應(yīng)用程序中生成預(yù)覽和縮略圖芍瑞。
在開發(fā)擴(kuò)展程序時(shí),您可能需要設(shè)置一個(gè)斷點(diǎn)并查看其執(zhí)行過程褐墅,但是由于Xcode
調(diào)試器只能附加到一個(gè)進(jìn)程一次拆檬,因此必須決定是否將調(diào)試器附加到您的應(yīng)用程序或者擴(kuò)展中。
注意:在撰寫本文時(shí)妥凳,在擴(kuò)展中設(shè)置斷點(diǎn)時(shí)竟贯,
Xcode
調(diào)試器似乎無法正常工作。一些斷點(diǎn)似乎會(huì)導(dǎo)致運(yùn)行循環(huán)run loop
崩潰逝钥。其他時(shí)候屑那,調(diào)試器似乎失去了與擴(kuò)展的連接。您可能必須嘗試幾次此練習(xí)艘款。
首先在ThumbnailProvider.swift
文件中持际,在ProvideThumbnail(for:_ :)
的開頭guard let thumbFile = ThumbFile(from: request.fileURL)
語句處設(shè)置一個(gè)斷點(diǎn)。
如果您構(gòu)建并運(yùn)行RazeThumb
并滾動(dòng)直到greenthumb.thumb
可見哗咆,您會(huì)注意到調(diào)試器不會(huì)在斷點(diǎn)處停止蜘欲。 不要驚慌。 您可以解決該問題晌柬。
單擊scheme selector
中的RazeThumb
以查看帶有可用schemes
列表的下拉列表芒填。 選擇ThumbFileThumbnail
作為scheme
呜叫,然后單擊Run
空繁。 當(dāng)提示您選擇要啟動(dòng)的應(yīng)用程序時(shí)殿衰,選擇RazeThumb
并滾動(dòng)直到greenthumb.thumb
可見。 這次盛泡,調(diào)試器應(yīng)在斷點(diǎn)處停止闷祥。
為了獲得更多樂趣,請重新運(yùn)行ThumbFileThumbnail scheme
傲诵,而不是選擇Files
應(yīng)用程序以查看您的代碼在其他應(yīng)用程序中運(yùn)行凯砍!
您現(xiàn)在已經(jīng)了解了如何為受支持的文件類型和自定義文件類型創(chuàng)建Quick Look
縮略圖和預(yù)覽。
以下是您在此過程中涉及的一些關(guān)鍵點(diǎn):
- 縮略圖是文件內(nèi)容的縮影拴竹。
-
QuickLook
框架可以為各種標(biāo)準(zhǔn)文件類型(例如圖像悟衩,音頻,視頻栓拜,文本座泳,PDF等)創(chuàng)建縮略圖和預(yù)覽。 - 使用擴(kuò)展名幕与,您可以擴(kuò)展
QuickLook
框架以支持您自己的自定義文件類型挑势。 - 擴(kuò)展程序允許設(shè)備上的所有應(yīng)用程序訪問其功能。
- 擴(kuò)展程序與應(yīng)用程序分開運(yùn)行啦鸣。
- 您可以在開發(fā)過程中將
Xcode
調(diào)試器附加到擴(kuò)展程序潮饱。
如果您想了解更多信息,可以探索許多相關(guān)主題:
- 您可以在QuickLook Thumbnailing和WWDC 2019 Quick Look Previews from the Ground Up深入研究蘋果文檔诫给。兩者都提供了對可能性的更多見解香拉。
- 在 QuickLook Previews for iOS: Getting Started中了解有關(guān)文檔預(yù)覽的更多信息,其中涵蓋了編輯工具和縮放過渡以及預(yù)覽的其他功能中狂。
- 基于文檔的應(yīng)用程序使用自定義文件類型凫碌,您可以在 Document Based Apps Tutorial: Getting Started中探索有關(guān)如何定義自定義文件類型并使用它們的更多信息。
- 在Apple Developer網(wǎng)站上查看
Apple
提供了哪些其他擴(kuò)展吃型。
后記
本篇主要講述了
QuickLook
預(yù)覽和縮略圖擴(kuò)展的實(shí)現(xiàn)证鸥,感興趣的給個(gè)贊或者關(guān)注~~~