PDF 格式的新标签栏图标...创建自定义的指南?

New tab bar icons in PDF format... Guidelines to create custom?

我注意到在 Xcode 的最新版本中,"Tabbed Application" 的项目模板创建了一个项目,其中标签栏图标图像(称为 "first" 和 "second" ,对于默认的两个 tabs/view 可用控制器)实际上以 .pdf 格式存储 ,而不是 .png,并显示在 Assets.xcassets 文件夹中,分辨率为 "All" 用作 "Universal"(而不是像应用程序图标一样用作 "iPhone app iOS 7-8" 的分辨率“@3x”)。

我假设这是为了提供基于矢量图形的资源,它真正独立于分辨率,因此支持各种设备。

我的问题是:以这种格式创建自定义资源的准则是什么?我想应该首先在 Adob​​e Illustrator 中创建自定义轮廓并将其导出为 pdf 格式,但是,我应该使用什么尺寸和单位?还有其他需要注意的地方吗?我没有在 Apple 官方文档中找到任何内容,网络搜索 "ios tab bar icon pdf" 只提供指向提供剪贴画等的网站的链接。

注意:我想过要post这个问题还是在Graphic Design Stack Exchange网站上,但它仍然与Xcode IDE 和开发 iOS 应用程序,所以我把赌注押在了这里。如果您不这么认为,请随时投票赞成关闭它。

I assume this is to provide a vector graphics-based resource that is truly resolution-independent and hence supports all sorts of devices.

我的理解是Xcode实际上是将这些矢量图像转换成具有适当分辨率的位图。因此它们仅在设计时是矢量,在 运行 时是位图。

What are the guidelines to create custom resources in this format? I guess it should start by creating a custom outline in Adobe Illustrator and exporting it in pdf format, but, What size and units should I use?

创建以磅为单位的大小,与您想要的图标大小相同。然后导出为PDF。我注意到有些程序生成的 PDF 在 Interface Builder 中看起来不错,但在实际应用程序中是空白的。也许 Illustrator 可以正常工作,但如果不行,请尝试使用其他程序转换为 PDF。

我理解 MirekE 的回答,因为我遇到了挑战,现在有了解决方案。但对于其他人来说,这是一个真实世界的例子。

我使用草图(强烈推荐)和 30 X 30 画板创建我所有的线条图标(或您选择的任何东西),然后在里面应用绘图。我使背景透明,然后将导出设置为 1x 大小并应用 PDF 格式。在此屏幕截图中可见。

然后简单地导入 Xcode > 在 Images.xcassets 中创建对象 > select 图像组 > 从下拉比例因子中选择单个向量(在属性检查器中) > 然后只需将导入的图像拖放到单个占位符中即可。

我已将此方法应用于我所有的自定义标签栏项目,结果非常好。

我刚遇到这个问题,我在使用此扩展程序分配它时通过手动调整 UIImage 的大小来解决它:

extension UIImage {

    func aspectFit(to size: CGSize) -> UIImage? {
        let width = self.size.width
        let height = self.size.height
    
        let widthScale = size.width / width
        let heightScale = size.height / height
    
        let scaleFactor = min(widthScale, heightScale)
    
        UIGraphicsBeginImageContextWithOptions(CGSize(width: width * scaleFactor, height: height * scaleFactor), false, 0.0)
        self.draw(in: CGRect(x: 0.0, y: 0.0, width: width * scaleFactor, height: height * scaleFactor))
    
        defer {
            UIGraphicsEndImageContext()
        }
    
        return UIGraphicsGetImageFromCurrentImageContext()
      }
}

用法:

tabBarItem.image = myImage.aspectFit(to: CGSize(width: 25, height: 25))