【问题标题】:Using @2x files for a NonRetina iPad when @2x~ipad images exist当存在@2x~ipad 图像时,为非视网膜 iPad 使用@2x 文件
【发布时间】:2012-04-20 15:45:08
【问题描述】:

我有 3 张图片,file.png、file@2x.png 和 file@2x~ipad.png。我想在 Retina iPhone 和非 Retina iPad 上使用 file@2x.png。

我想在界面生成器中设置图像。 iPhone 工作正常,我在 xib 中设置 file.png 并在 Retina iPhone 上加载 file@2x.png。但在非视网膜 iPad 上,即使我指定了 file@2x.png,也会加载 file@2x~ipad.png。

当通过界面生成器/xibs 不存在 ~ipad 版本时,有没有办法将 nonRetina iPad 设置为默认为 @2x 版本? (我很清楚通过编写自定义加载代码通过代码加载具有不同扩展名的图像)我可以更改任何设置或 plist 吗?

我不想复制同一张图片,只是为了给它们起不同的名字。

谢谢。

【问题讨论】:

  • 我不知道这是否可行,但您可以尝试从标准文件名到您真正想要加载的文件的符号链接。
  • @EricS 我也读到过,我会调查一下,谢谢。

标签: ios xcode ipad


【解决方案1】:

使用符号链接将myImage~iPad.png 指向myImage@2x.png。来源https://stackoverflow.com/a/10223119/313875

这个答案的摘要(阅读 - 其他人对另一个问题的回答,所以请给他们投票!):

为每张图片使用ln -s myImage@2x.png myImage~ipad.png。或者使用脚本:

#! /bin/sh

# Script to batch create symlinks that point ~ipad files to @2X files

# To run:
# Copy to the directory where the files are located
# Enter the following at the terminal prompt:
# bash create_ipad_image_links.txt

# For every @2x file we find in this directory we create a symlink

for file in *@2x.png
do
  echo "link: ${file//@2x/~ipad} to: $file" 
  ln -s $file ${file//@2x/~ipad}
done

【讨论】:

  • 我不知道使用链接编译是否会在设备上创建两个单独的图像副本(虽然我没有尝试过)。我确实尝试使用 NSFileManager 在设备上创建硬链接,但由于“写权限”,您似乎无法使用捆绑项目创建链接(甚至不是符号链接)......即使我什至没有写任何东西。我并不是说您的答案不起作用,只是我希望通过我的应用程序代码而不是在开发过程中找到解决方案;但是这个解决方案对我帮助很大,所以我会标记它是正确的
  • 是的,您不能在捆绑包中创建任何形式的链接。很高兴我的回答对您有所帮助,即使这不是您所希望的。
  • 您好,感谢您的帮助。我最终这样做了,但我将它放在项目的运行脚本中,以便在项目编译时运行它。此外,我必须将 ipad xibs 中对 2x 的所有引用更改为 ~ipad,将所有 2x 文件重命名为 ~ipad,然后在运行脚本中创建从 ~ipad 到 2x 的符号链接。有用!如果我没有从 2x 重命名为 ~ipad,ipad xibs 仍会尝试获取视网膜版本,因为 xib 中指定的文件是 2x。
【解决方案2】:

在不添加重复文件的情况下执行此操作的一种方法是将 iPad 版本命名为 file@2x@2x.png。然后,您可以使用[UIImage imageNamed:@"file@2x"]; 设置iPad 版本,或将图像设置为file@2x.png,以便在视网膜iPad 上使用file@2x@2x.png,在普通iPad 上使用file@2x.png。这样就没有重复了。

【讨论】:

  • 问题是我需要这个通过接口builder/xibs,所以我不能使用imageNamed,也无法控制加载哪个版本。我在问这个问题,看看是否有我可以调整的设置或列表。我已经编写了代码来处理通过 imageNamed 加载的文件,因此如果 ~ipad 不存在,则会加载 @2x,但我的代码不能用于加载 xibs。
  • 这就是为什么我说这不是你想要的。实际上,您是否正在创建两个笔尖(一个用于 iPhone,一个用于 iPad)?在这种情况下,只需使用file@2x.png 而不是file.png 作为图像,file@2x@2x.png 将在视网膜 iPad 上正常使用。
  • 是的,我有两个笔尖。我会试试的!
【解决方案3】:

尝试创建file~ipad.png。非视网膜 iPad 应首先查找该文件。

【讨论】:

  • 我不想制作重复的图像,我需要它是@2x,以便 Retina iPhone 使用它。
  • 你不了解图片的搜索顺序。使用 image~ 名称约定会强制相关设备使用该图像。例如,您也可以使用 image~iphone.png AND image~iphone@2x.png。 jrtc27 的答案与我的大致相同,增加了符号链接而不是图像副本的便利。
  • 首先,我认为是@2x~iphone 用于retina iphone 修饰符。其次,我知道图像的顺序。我知道为什么我想做的事情不起作用(我在非视网膜 ipad 上使用 @2x,所以它假设我想在 ipad 上使用视网膜并尝试找到最具体的文件,即 @2x~ipad )。我无法创建副本,因为那是浪费空间。我也不能重命名该文件,因为视网膜 iphone 需要它。
猜你喜欢
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多