【问题标题】:How to determine which Default image was used at runtime?如何确定在运行时使用了哪个默认图像?
【发布时间】:2012-11-17 17:38:57
【问题描述】:

我有一个具有不同默认图像的通用应用:

默认.png

默认@2x.png

Default-Portrait@2x~ipad.png

等等。如何在运行时以编程方式确定使用了哪个文件?我试过这个:

    UIImage *imgUsed = [UIImage imageNamed:@"Default"];

但是无论我使用哪个模拟器,这总是返回Default.png(根据正在使用的屏幕尺寸,在模拟器中启动时会显示正确的图像)。

谢谢。

【问题讨论】:

  • 我不得不问,为什么你需要知道这个?只是因为可能有更好的方法来实现你想要的。
  • 我想在启动时扩展默认屏幕以制作一个以默认图像作为背景的“正在加载...”屏幕。它只会在第一次运行时(或安装新版本时)发生,所以不会经常发生。
  • 我会评论 imageNamed: 将导致图像在您的应用程序的生命周期内被缓存(不希望出现在启动屏幕中) - 使用 imageWithContentsOfFile: - (使用 [[NSBundle mainBundle] pathForResource:name ofType:@"png"] 获取路径)

标签: ios uiimage


【解决方案1】:

创建一个带有图像视图的“加载”视图控制器 - 一个 iPhone 和一个 iPad 版本。在每一个中,将图像设置为默认或默认-iPad - 将自动为您选择视网膜/非视网膜版本。

也将加载标签或活动指示器添加到视图控制器。

当您需要时,显示此视图控制器 - 您可以使用 UI_USER_INTERFACE_IDIOM() 宏(请参阅 here)判断您是在 iPhone 还是 iPad 上运行并加载相应的控制器。

【讨论】:

  • 这适用于Default.pngDefault@2x.png,但不适用于更长的文件名(例如Default-Portrait@2x~ipad.png)。但这非常接近......!
【解决方案2】:

您执行此操作的方式类似于逆向工程。您了解屏幕比例是 1 还是 2(视网膜与否)以及设备的尺寸(iPad、iphone3.5 屏幕、iphone4.0 屏幕),然后使用此信息重新创建基本图像名称。

系统没有通过 api 告诉您这些信息。

编辑:对,您可以根据@jrturton 的建议使用 UI_USER_INTERFACE_IDIOM 宏来确定 iPad/iPhone,但您仍然需要查看手机尺寸以了解使用的是 3.5 英寸还是 4 英寸高的图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多