在 UIDocumentPickerViewController 中显示自定义 UTI 的图标
Posted
技术标签:
【中文标题】在 UIDocumentPickerViewController 中显示自定义 UTI 的图标【英文标题】:Show Icons for Custom UTIs in UIDocumentPickerViewController 【发布时间】:2014-09-02 14:47:55 【问题描述】:我正在开发的 ios 应用会导出 UTI。 Info.plist
的相关部分如下所示:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.xml</string>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>GPX Document</string>
<key>UTTypeIdentifier</key>
<string>de.company.app.gpx</string>
<key>UTTypeSize320IconFile</key>
<string>Doc320.png</string>
<key>UTTypeSize64IconFile</key>
<string>Doc64.png</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>gpx</string>
</array>
</dict>
</dict>
</array>
我希望应用通过“在...中打开”对话框处理 GPX 文件,因此在同一个 PLIST 中还有一个文档类型定义(引用 UTI):
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Icon29.png</string>
<string>Icon58.png</string>
</array>
<key>CFBundleTypeName</key>
<string>de.company.app.gpx</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>de.company.app.gpx</string>
</array>
</dict>
</array>
在 Safari 中打开 GPX 文件时,它会显示我在 CFBundleTypeIconFiles
下指定的图标,即在视网膜设备上 Icon58.png
。该应用程序还允许通过 iOS 8 中引入的 UIDocumentPickerViewController 类进行导入,虽然 UTI 定义可以很好地过滤 iCloud Drive 中的相关文件,但它没有显示我指定的任何艺术品:
我已确保所有引用的图像文件(Icon29.png
、Icon58.png
、Doc64.png
、Doc320.png
)确实位于应用程序包的根目录中。它们名称中的数字表示它们的高度(以像素为单位)。 Doc...
文件是正方形,其他两个文件是 this specification(仅限 iPhone)。
我基本上有两个问题:
1) 如何让 UIDocumentPickerViewController 为我们的 UTI 显示自定义图标?
2) 还有其他使用UTTypeSize64IconFile
和UTTypeSize320IconFile
的用例吗?
【问题讨论】:
【参考方案1】:很遗憾,答案是除非您的应用能够控制这些文件写入磁盘的方式,否则无法完成。在这种情况下,您可以继承 UIDocument
并写出缩略图。 Here 是 Apple 工程师发布的原始答案,发布在 Apple 开发者论坛上(需要登录)。它包含一个代码示例来说明它是如何完成的。
我还没有找到问题第二部分的答案。
【讨论】:
嗨。所以听起来UIDocumentPickerViewController
为您自己的 UTI 显示自定义图标仅适用于您控制的文件(因为您需要写出缩略图)。如果用户浏览 iCloud 说他们共享的 iCloud ~/desktop 文件夹并找到另一个应用程序编写的 .gpx 文件,那么没有办法指定显示的图标吗?【参考方案2】:
我相信您在 CFBundleTypeIconFiles 键中使用了错误大小的图标。您使用的尺寸是设置图标的大小。
为了验证我的理论,请添加更多不同大小的文件。此外,所有图标都是方形的。您的问题中的图像看起来是矩形的。
根据Icon and Image Design --> App Icon部分:
文档图标
如果您的 iOS 应用程序创建自定义类型的文档,您希望用户 一眼就能认出这些文件。你不需要 为此目的设计一个自定义图标,因为 iOS 使用您的应用程序图标 为您创建文档图标。
摘自App Icons:
应用图标(必需)(iPhone)
60 x 60 像素 120 x 120 像素 (@2x)这是在 iOS 7 及更高版本的 iPhone 和 iPod touch 上运行的应用程序的主图标。
设置图标(所有设备)
29 x 29 像素 58 x 58 像素 (@2x)【讨论】:
CFBundleTypeIconFiles
图标的大小在this document(部分:“文档图标”)中非常清楚地记录,也在问题中链接:“22 x 29 像素/44 x 58 像素(高分辨率)”。它们既不是正方形,也没有与设置图标混淆。当然,我们的应用程序中也有普通的应用程序图标,但它们也没有被使用。
帮我一个忙,并在 plist 中的 CFBundleTypeIconFiles 下列出正常的应用程序图标。当我在家中使用我的 MacBook 时,我会进行自己的测试。
这是不正确的请参考官方developer.apple.com/library/ios/documentation/General/Reference/…以上是关于在 UIDocumentPickerViewController 中显示自定义 UTI 的图标的主要内容,如果未能解决你的问题,请参考以下文章
NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记