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

时间:2015-08-13 03:44:54

标签: ios xcode pdf uitabbarcontroller xcasset

我注意到在Xcode的最新版本中," Tabbed Application"的项目模板。创建一个项目,其中标签栏图标图像(被称为"第一""第二",对于默认的两个选项卡/视图控制器可用)实际存储为的.pdf格式,不是.png ,并显示在Assets.xcassets文件夹中,分辨率为"全部"用作" Universal" (而不是-say-一个决议" @ 3x"用作" iPhone应用程序iOS 7-8",就像应用程序图标一样)。

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

我的问题是:以此格式创建自定义资源的准则是什么?我想它应该首先在Adobe Illustrator中创建自定义大纲并以pdf格式导出,但是,我应该使用什么尺寸和单位?还有其他需要注意的事项吗?我还没有在官方Apple文档中找到任何内容,也没有在" ios tab bar icon pdf"仅提供指向剪贴画等网站的链接。

注意:我曾想过是在这里或在Graphic Design Stack Exchange网站上发布这个问题,但它仍然与Xcode IDE和开发iOS应用程序有关,所以我放置我打赌在这里。如果您不这么认为,请随意投票支持。

3 个答案:

答案 0 :(得分:11)

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

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

enter image description here

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

enter image description here

我已将此方法应用于我的所有自定义tabbar项目,结果非常出色。

答案 1 :(得分:2)

  

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

我的理解是Xcode实际上将这些矢量图像转换为具有适当分辨率的位图。所以它们只是在设计时的矢量和运行时的位图。

  

以此格式创建自定义资源的准则是什么?一世   猜测它应该从在Adobe中创建自定义大纲开始   Illustrator并以pdf格式导出,但是,大小和单位是多少   我应该用吗?

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

答案 2 :(得分:0)

我刚刚遇到了这个问题,我在使用此扩展程序为其分配时通过手动调整 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))