我正在开发一个 QLThumbnailProvider 扩展来显示我的文档类型的缩略图。我的扩展程序没有似乎被调用 - 我的缩略图没有出现,而且我没有看到我添加的日志记录出现在任何日志文件中。
我有一个基于 UIDocumentBrowserViewController 的应用程序,它定义了一种新的文档类型。它导出一个 UTI (com.latenightsw.Eureka.form )。我的应用能够浏览、创建和打开文档,但缩略图是空白的。
我已将缩略图扩展目标添加到我的项目中。代码如下所示:
class ThumbnailProvider: QLThumbnailProvider {
override func provideThumbnail(for request: QLFileThumbnailRequest, _ handler: @escaping (QLThumbnailReply?, Error?) -> Void) {
// Third way: Set an image file URL.
print("provideThumbnail: \(request)")
handler(QLThumbnailReply(imageFileURL: Bundle.main.url(forResource: "EurekaForm", withExtension: "png")!), nil)
}
}
我已确认 EurekaForm.png 是目标的一部分,并被复制到扩展程序包(以及主机应用程序包)。
我已经确认我的尿路感染已被宣布:
有人有什么建议吗?
Best Answer-推荐答案 strong>
似乎日志记录和断点有时在应用程序扩展中不起作用。甚至 fatalError 都会默默发生。
在我的项目中,我无法让初始化程序 QLThumbnailReply(imageFileURL 工作。然而,其他初始化程序似乎工作得更好。
将图像绘制到上下文中
使用上下文初始化器时,您必须使用介于 request.minimumSize 和 request.maximumSize 之间的上下文大小。
下面我编写了一些代码,它获取图像并将其绘制到上下文中,同时保持上述条件。
override func provideThumbnail(for request: QLFileThumbnailRequest, _ handler: @escaping (QLThumbnailReply?, Error?) -> Void) {
let imageURL = // ... put your own code here
let image = UIImage(contentsOfFile: imageURL.path)!
// size calculations
let maximumSize = request.maximumSize
let imageSize = image.size
// calculate `newImageSize` and `contextSize` such that the image fits perfectly and respects the constraints
var newImageSize = maximumSize
var contextSize = maximumSize
let aspectRatio = imageSize.height / imageSize.width
let proposedHeight = aspectRatio * maximumSize.width
if proposedHeight <= maximumSize.height {
newImageSize.height = proposedHeight
contextSize.height = max(proposedHeight.rounded(.down), request.minimumSize.height)
} else {
newImageSize.width = maximumSize.height / aspectRatio
contextSize.width = max(newImageSize.width.rounded(.down), request.minimumSize.width)
}
handler(QLThumbnailReply(contextSize: contextSize, currentContextDrawing: { () -> Bool in
// Draw the thumbnail here.
// draw the image in the upper left corner
//image.draw(in: CGRect(origin: .zero, size: newImageSize))
// draw the image centered
image.draw(in: CGRect(x: contextSize.width/2 - newImageSize.width/2,
y: contextSize.height/2 - newImageSize.height/2,
width: newImageSize.width,
height: newImageSize.height);)
// Return true if the thumbnail was successfully drawn inside this block.
return true
}), nil)
}
关于ios - QLThumbnailProvider 扩展似乎没有被调用,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/48451557/
|