草庐IT

ios - 没有@3x 图像和某些图像为 JPG 时的应用程序细化

coder 2023-09-27 原文

为了即将对我的一个应用程序进行更新,我已将所有图像资源打包到 Assets 目录中。

但是,目前我的大部分图像都没有@3x 版本。我已经检查过模拟器,并且在 iPhone 6 Plus 上使用了 @2x 版本。

我不介意这种行为有两个原因:

  1. 结果对于我正在使用的图像来说已经足够好了
  2. 只有 50% 的用户在使用 iOS 9。如果我添加 @3x 图片,我的应用程序的大小对于那些使用旧操作系统的用户来说会猛增

虽然图像在 iPhone 6 plus 的模拟器中正确加载,但我有点担心在我存档我的应​​用程序时会发生什么。特别是,我担心使用 App Thinning 的 iPhone 6 Plus 用户会得到一个没有任何图像的应用程序:)

所以,我有两个问题:

  1. 如果我不提供@3x 图像,iPhone 6 plus 将加载@2x 在我的更新在 App Store 上线之后?
  2. 我还会从 App Thinning 中受益吗,因为 @2x 和 @3x 显示不会下载@1x 图像(反之亦然)?还是 App Thinning 在这种情况下不起作用,用户将获得相同的 Assets ,而不管他们的设备屏幕如何?

这些都是微不足道的问题,但我无法在网上任何地方找到有关当您不遵循 Apple 的指导方针,不在 Assets 目录中提供 @3x 图像但您的应用程序仍可用于 iPhone 6 + 时会发生什么的信息。此外,我的一些图片是 JPG 格式,这增加了额外的不确定性,因为它不是 iPhone 的理想格式。

在此先感谢您的帮助!

最佳答案

我使用 Matt 提出的程序执行了几个额外的测试:

  1. 当最低部署目标是 iOS 6 时,没有 Assets.car 产生。 [UIImage imageNamed:] 为 JPG 图像返回 nil,除非“.jpg”扩展名作为图像名称的一部分提供
  2. 当最小部署目标是 iOS 7 时生成 Assets.car 但 它仅包含那些导入到 Assets 目录中的图像 作为PNG。所有 JPG 都在 Assets.car 之外复制。 [UIImage imageNamed:] 为 JPG 图像返回 nil,除非提供“.jpg”扩展名作为图像名称的一部分。
  3. 当最低部署目标是 iOS 8 时,Assets.car 包含所有 图片。它的大小是 13MB。 [UIImage imageNamed:] 即使未指定“.jpg”扩展名,也能正确返回 JPG 图像。当包含“.jpg”扩展名时,图像也能正确加载
  4. 当最低部署目标是 iOS 9 Assets.car 包含所有 图片。它的大小是 11.5MB。 [UIImage imageNamed:] 即使未指定“.jpg”扩展名,也能正确返回 JPG 图像。当包含“.jpg”扩展名时,图像也能正确加载

我用过 image extractor tool Matt 建议从这些 Assets 中提取图像。我只能从配备 Retina 的设备的文件中导出,我可以确认所有图像都具有正确的分辨率(即只有视网膜尺寸,忽略 iPad 特定图像)。然而,该工具将所有这些都保存为 PNG 格式,因此文件夹的最终大小总是大于 Assets.car。

最令人惊讶的是,案例 3 和案例 4 的文件夹大小相同 (39.4MB)。而且,图像似乎完全相同。所以,我真的很想知道那里发生了什么,因为在这些情况下,Assets.car 的大小相差 2MB。

总而言之,我们仍然不确定这种测试方法是否可以用来准确模拟 App Thinning 行为。因此,如果有人对此有亲身经历,那么如果他们能分享它就太棒了。

但是,假设为特定设备导出 AdHoc 会产生与 App Store 执行的实际 App Thinning 相同的结果,我们可以得出结论:

  1. 只有当部署目标是 iOS 7 或更高版本时,应用程序瘦身才会开始
  2. JPG 图像的应用瘦身仅适用于从 iOS 8 的最低部署目标开始
  3. [UIImage imageNamed:] 仅当通过 Assets 目录正确处理 JPG 图像时,才在不提供“.jpg”扩展名的情况下正确返回 JPG 图像。如前所述,只有当最低部署目标是 iOS 8 或更高版本时才会发生这种情况
  4. [UIImage imageNamed:] 如果指定了“.jpg”扩展名,则始终加载正确的图像。

最后两个结论似乎与这个问题无关,但我在 Stack Overflow 上发现了几个关于如何使用 Asset Catalogs 正确加载 JPG 图像的相互矛盾的观点。有些人声称您可以在不提供“.jpg”扩展名的情况下加载它们,而其他人则提示这种方法不起作用。我认为上面的 3 和 4 详细解释了这种情况下发生的情况以及人们得到不同结果的原因。

关于ios - 没有@3x 图像和某些图像为 JPG 时的应用程序细化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33250182/

有关ios - 没有@3x 图像和某些图像为 JPG 时的应用程序细化的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  3. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  4. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  5. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  6. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  9. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  10. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

随机推荐