`imageWithName:` 忽略 Xcode 资产目录`Alignment` 属性

Posted

技术标签:

【中文标题】`imageWithName:` 忽略 Xcode 资产目录`Alignment` 属性【英文标题】:Xcode asset catalogue `Alignment` properties are ignored for `imageWithName:` 【发布时间】:2016-06-17 13:27:39 【问题描述】:

Xcode 资产目录编辑器支持图像的Alignment 属性。这似乎是一种设置UIImagealignmentRectInsets 的机制,Apple 的Asset catalogue reference 也强烈建议这样做:

对齐插入

字典

UIImage 中的 alignmentRectInsets 或 NSImage 中的 alignmentRect 的插图。插入标签可以省略。

但是,当我从已使用编辑器设置 Alignment 的目录加载图像时,它没有得到对齐。

我正在使用[UIImage imageNamed:] 加载图像。

这是一个已知的错误,还是我遗漏了一些微妙之处?

【问题讨论】:

【参考方案1】:

我已经做了一些测试,我想我已经找到了它不起作用的原因。

有一个(小)Bug

如果您没有在资产目录编辑器中将 allalignment 值设置为 0 以外的值,则 none 的对齐值将加载该图像资源时感到荣幸。由于某些对齐值是0 是完全合理的,我相信这是一个错误,我会在雷达上提出它。然而——这就是说,这个功能仍然非常有用,我打算使用它。

像素和点

值得知道的是,您在资产目录编辑器中为 多尺度 PNG 设置的对齐是以 像素不是以点为单位定义的

当您加载资产然后向图片询问其alignmentRectInsets 时,结果会以以点数为单位报告。即,该特定资产的比例因子将应用于您在编辑器中设置的值。

举个例子:如果你在@3x 资产上设置30, 30, 30, 30 对齐,然后加载UIImage,你会看到alignmentRectInsets10, 10, 10, 10

矢量资源

我还测试了一个矢量资产。在这里,您有一个矢量图像,并为它指定一组对齐值。

在这种单个矢量资产的情况下,资产目录编辑器中的对齐以而不是像素定义。这与多尺度 PNG 的情况相反!

当您加载资产并请求其aligmentRectInsets 时,您将看到报告的相同值,而不管 UIKit 为该图像加载的比例如何。

...这实际上是有道理的,如果做不同的事情就行不通了。但它似乎可能会抓住人。

【讨论】:

以上是关于`imageWithName:` 忽略 Xcode 资产目录`Alignment` 属性的主要内容,如果未能解决你的问题,请参考以下文章

XCode 中忽略了分段错误

Git 不会忽略 .gitignore 中的某些 Xcode 文件

Xcode - 文件是模块的一部分,忽略导入

忽略 Xcode 8 中的注释警告 - 记得要让着本宝宝

忽略 Xcode 的“本地化导出”中的一些文本

Xcode 忽略警告配置