【发布时间】:2023-03-14 10:30:01
【问题描述】:
我的问题 如何从 QLThumbnailGenerator.shared.generateRepresentations(for: ... ) 返回 cgImage?
我的挂断/尝试(代码如下) 我的尝试有一个函数(第 13 行),它为 ListView 条目(第 39 行)返回一个 CGImage。我尝试使用一个空的 CGImage(第 18 行),但它的 init 参数令人困惑,并且对于简单的缩略图来说似乎过多。我可能搞错了。
注意事项 使用了 CGImage,因此相同的代码可以同时用于 iOS 和 MacOS Catalyst。 (在 WWDC 2019 会议 719 中看到了这一点。) 我尝试但未能从以下位置收集答案: - https://developer.apple.com/documentation/quicklookthumbnailing/creating_quick_look_thumbnails_to_preview_files_in_your_app - https://forums.developer.apple.com/message/375807
道歉/感谢 感谢您的耐心等待,因为答案可能很明显,而我的词汇量可能会丢失。我愚蠢的大脑在没有一点动手经验的情况下就听课了,所以我从零编程知识开始作为隔离爱好开始了这个第一个应用程序。之后我会回到理论课。
ResultsView.swift
import SwiftUI
import MobileCoreServices
import Combine
import QuickLookThumbnailing
import CoreImage
import UIKit
struct ResultsView: View {
@EnvironmentObject var parsedScreeningData: ParsedScreeningData
@EnvironmentObject var search: Search
func generateThumbnail(ofThis: String) -> CGImage {
let url = self.search.libraryFolder.appendingPathComponent(ofThis)
let size: CGSize = CGSize(width: 68, height: 88)
let request = QLThumbnailGenerator.Request(fileAt: url, size: size, scale: (UIScreen.main.scale), representationTypes: .all)
let generator = QLThumbnailGenerator.shared
var image = CGImage()
generator.generateRepresentations(for: request) { (thumbnail, type, error) in
DispatchQueue.main.async {
if thumbnail == nil || error != nil {
assert(false, "Thumbnail failed to generate")
} else {
image = thumbnail!.cgImage
}
}
}
return image
}
var body: some View {
VStack{
List(search.searchResults) { datum in
HStack {
Image(self.generateThumbnail(ofThis: datum.PDFname), scale: (UIScreen.main.scale), label: Text("PDF"))
Text("File: \(datum.PDFname)")
Text("Cell line: \(self.parsedScreeningData.parsedScreeningData[datum.termFoundIndex].misidentifiedCellLine)")
.padding(.trailing, 10)
.padding(.leading, 10)
Spacer()
Image(systemName: "eyeglasses").foregroundColor(ColorManager.iconGreen)
} // HStack
} // List
}// Vstack
.colorMultiply(ColorManager.beigeMedium)
.padding(.trailing, 0)
.padding(.leading, 0)
.listStyle(GroupedListStyle())
} // body
} // ResultsView struct
struct ResultsView_Previews: PreviewProvider {
static var previews: some View {
ResultsView().environmentObject(ParsedScreeningData()).environmentObject(Search())
}
}
【问题讨论】: