• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - QLThumbnailProvider 扩展似乎没有被调用

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:39:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在开发一个 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 是目标的一部分,并被复制到扩展程序包(以及主机应用程序包)。

我已经确认我的尿路感染已被宣布:

Thumbnail Extension PList

有人有什么建议吗?



Best Answer-推荐答案


似乎日志记录和断点有时在应用程序扩展中不起作用。甚至 fatalError 都会默默发生。

在我的项目中,我无法让初始化程序 QLThumbnailReply(imageFileURL 工作。然而,其他初始化程序似乎工作得更好。

将图像绘制到上下文中

使用上下文初始化器时,您必须使用介于 request.minimumSizerequest.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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap