适用于 RTL 语言的可靠 iOS 图像翻转



我正在尝试让图像翻转可靠地工作,但我看到了一些问题。我在 Xcode 资产目录中管理我的图像,需要以 RTL 语言翻转的图像已配置为"方向"属性设置为"从左到右,镜像"。 在某些情况下,我有 2 个单独的资产,因为翻转是不够的。这些配置将"方向"属性设置为"两者",并提供两个单独的图像资产。 所有图像都是启用了"保留矢量数据"的 PDF 资产。

只要我使用 iOS 11 和 Xcode 9.2 进行测试,这一切都很好用。 当我在iOS 9上进行测试时,问题就开始了。当我启动应用程序时,为 RTL 配置的图像不会显示,即使我不使用 RTL 语言运行也是如此。

从Xcode 9.3开始,我似乎遇到了一个新问题。资产目录会自动更新;RTL 映像将重新配置为"两者"方向,并对目录中的 json 文件进行更改。选择"从左到右,镜像"不再有效。

有没有人想出如何让它可靠地工作?或者我只是在看Xcode中的最新错误和iOS9的一些旧问题?

[编辑] 在对生成的 IPA 文件进行进一步分析后,似乎 Assets.car 文件不包含 RTL 图像的.png文件。似乎它们没有生成(因为源文件是PDF),因此可以解释iOS 9中缺少的图像(不使用PDF图像)。

我修复了它,但直到 Apple 开发者论坛上的某人指出,直到 Xcode 8/iOS 10 才引入了资产目录"方向"属性。

这意味着它在iOS 9中不起作用,并且当部署目标设置为iOS 10以下时,您甚至可以选择它。

因此,当您想与较旧的iOS设备兼容时,请不要尝试使用此功能!您仍然可以让它以编程方式工作。

例如,如果您在UIBarButtonItem中有一个图像,则可以为此按钮创建一个出口,并在viewDidLoad中运行以下命令:

self.someButton.image = [self.someButton.image imageFlippedForRightToLeftLayoutDirection];

这是因为 iOS 9 支持 imageFlippedForRightToLeftLayoutDirection。它仅在应用处于 RTL 模式时翻转图像。

如果需要加载完全不同的映像,可以按以下步骤操作:

if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft) {
self.someButton.image = [UIImage imageNamed:@"someRTLImage"];
}

最新更新