- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
苹果指南在这方面并没有给我太多帮助,但我开始认真对待 IOS 开发,当我看到图像从 @1x 变为 @3x 时,我吃了一惊。
我发现的一位消息人士说,它们是基于尺寸的。例如:
如果您正在处理推断的 VC 尺寸并且您的图像是 30x30 并且您在 iPhone6 上运行它,那么您的图像应该是 @3x 的 30x30、@2x 的 20x20 和 @1x 的 10x10。
我说的另一个消息来源提到它是基于图像分辨率而不是图像的大小。
有人可以帮我解决这个问题并解释如何确保我的图像在所有屏幕上看起来都很专业吗?
提前致谢!
最佳答案
当第一部 iPhone(和 SDK)问世时,所有图像都是 1x(图像的 1 个像素 = 屏幕的 1 个像素),因为这就是我们必须关心的全部。在那部手机上,每英寸有 166 个水平或垂直像素 (dpi)。因此,要显示从左边缘延伸到右边缘的图像,我们的图像需要是 320 宽(因为这是 Apple 告诉我们的——我们不必计算像素)任意高度。假设高 100 像素。我们将该图像命名为 MyPhoto.png(因为 Apple 告诉我们 iPhone 操作系统最适合 PNG 图像)并且我们会显示它。
当 iPhone 4 推出 Retina 显示屏时,其 Retina 显示屏的水平分辨率是旧款手机的 2 倍,垂直分辨率是旧款手机的 2 倍。所以现在我们需要更高分辨率的图像来获得最好看的界面。我们仍然只显示一个 2"宽的图像,但它需要两倍数量的水平像素和两倍数量的垂直像素(像素总数的 4 倍)来填充相同的空间。所以现在我们的图像需要640 x 200 像素。由于我们的应用程序仍然需要支持旧手机和新手机,我们不想只是用新手机替换旧图像。我们需要一种支持两者的方法。所以旧图像保持与以前相同的名称(我们没有附加“@1x”),新图像具有“@2x”文件扩展名,表示它们的分辨率是原来的两倍。所以我们将这个更大的图像命名为 MyPhoto@ 2x.png。
一个常见的问题是为什么不在新旧手机上都使用更高分辨率的图像?通过缩放,两者看起来都很好。问题主要在于 iPhone,尤其是较旧的手机,可使用的内存非常有限。在有限的内存上使用比所需大小大 4 倍的图像真的很困难。这就是为什么我们必须在我们的应用程序中同时拥有 1x 和 2x 图像的原因。
为了我们的理智,我们在设计界面时仍然只使用 1x。所以在我们的代码中屏幕仍然是 320 像素宽,即使我们要在 640 像素宽的视网膜显示器上显示它们。如果我们想在视网膜显示器上画一条 1 像素宽的线,我们会在代码中将其设为半像素宽。
由于 iPhone 6 Plus 的屏幕更大,Apple 不得不在屏幕上填充更多像素,以保持客户所期望的高分辨率。所以现在我们进入了 3x 图像。然而,iPhone 6 Plus 的水平或垂直像素数量并没有真正达到三倍。但是苹果再次让我们保持理智,只要求我们提供“@3x”图像,它担心在设备上缩小它们。和以前一样,我们仍然需要支持更小的屏幕分辨率,所以我们仍然在我们的应用程序中包含“@2x”和 1x 图像。
因此,继续我们的示例,@3x 图像需要是 1x 图像宽度和高度的三倍。所以现在我们需要一个 960 宽 x 300 像素高的图像。我们将其命名为 MyPhoto@3x.png。
请注意,虽然我之前提到了一些关于 166 dpi 显示的内容,但在创建这些图像时这并不重要。在您的照片编辑应用程序中,您并不真正关心图像是 166 还是 72 dpi 或其他任何东西。唯一重要的部分是我们导出的最终图像的宽度和高度像素数。
因此,为了回答您的问题(希望如此),您需要将所有这三个图像都包含在您的 iPhone 兼容应用程序中。对于仅限 iPad 的应用程序,您可以跳过 @3x 图像,因为 iPad 还没有 3x 屏幕。但是在使用 Interface Builder 和代码时,请继续只考虑 1x 大小。
例如,现在要在 iPhone 6 Plus 上显示 1 像素宽的线,您需要绘制 0.33 宽的线而不是 1 磅的线。当然,你仍然想支持所有其他的屏幕分辨率,所以你会使用这样的代码来设置你的线宽:
let lineWidth = 1.0 / UIScreen.mainScreen().scale
关于ios - 关于@2x @3x Xcode 图像的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30563493/
我正在观看来自 iTunes U. 的视频讲座,其中讲师展示了如何使用 Xcode 的调试器部分并能够将该窗口从主窗口拉开。 不幸的是,视频显示了如何在 Xcode3 中执行此操作的说明。如何在 Xc
现在我正在开发一个使用 Markdown 的静态网站。我不想在 SublimeText 中编辑文件,而是想在 Xcode 中编辑它们。我可以在 Xcode 中打开各个文件,但我想打开整个静态站点目录并
现在我正在开发一个使用 Markdown 的静态网站。我不想在 SublimeText 中编辑文件,而是想在 Xcode 中编辑它们。我可以在 Xcode 中打开各个文件,但我想打开整个静态站点目录并
我真的厌倦了其他用户的项目错误,因为 XCode 的默认类引用类型是“相对于 XCode 文件夹”。我知道您可以将其更改为“相对于封闭组”,这就是我们的项目,但是任何时候有人创建一个新的类文件并且忘记
我对 Xcode 一无所知,除了它是来自 Apple 的开发人员界面,它实际上来自 OSX CD,它也用于创建 iPhone 应用程序。 我也知道它有一个 Applications 文件夹,里面装满了
更新 Xcode(从 7.2 到 7.2.1)后,XcodeServer 无法运行 Xcode Service。当我选择更新的 Xcode 时,提示消息:Enable Accessibility ac
我很难找到有关新 XCode 布局的信息。如何查看源文件的反汇编,而不仅仅是 C++ 代码? 最佳答案 在 Xcode 4.2(和 Xcode 5)中,您可以通过以下方式查看文件的汇编或反汇编: 显示
我在 XCode 中为我的项目添加了一个文件夹并将其命名为 Themes,它将用于存储我的 iPad 应用程序的主题。在那下面我有红色、蓝色等等。 它们出现在 XCode 中。但是当我查看物理文件夹时
作为我之前 How can I create a reference cycle using dispatchQueues? 的后续: 对于强引用(会造成泄漏,但不是循环引用),例如Timer、Dis
我有一台 macbook air,我去商店安装 Xcode 7.3 并点击更新 App 按钮,然后出现了一个加载图标,但等待 30 分钟后什么也没发生。我从商店成功安装了 simple recorde
我的项目现在有一个project.xcworkspace/xcshareddata目录。 Xcode在project.xcworkspace/xcshareddata目录中存储什么? 最佳答案 xcs
我不经常使用 XCode 进行开发,最近 MacPorts 告诉我我需要获得 3.1 才能使包工作。我去了苹果,他们为我提供了最新版本,结果只适用于 OSX 6。因为我有 OSX 5,它对我没有任何帮
有谁知道如何强制 Xcode 停止运行。我更新到 6.2 但现在它不能正常工作。我需要退出 Xcode 才能完成更新或卸载并重新安装。菜单中的相当 Xcode 不可用。无法将其拖到垃圾箱,因为它说它仍
我最近从我的项目中删除了一些旧的测试类并删除了文件。正如预期的那样,文件被移到垃圾箱并在 git 中显示为已删除。 不幸的是,测试类和它们定义的测试用例继续出现在测试导航器中。我已经尝试过常见的疑点,
Xcode 中的场景编辑器显示大小但不显示单位。它是以英寸为单位的尺寸还是以米为单位的尺寸? 例如,当我选择一个节点时,例如一个盒子,当我在节点检查器中检查它的属性并在“边界框”旁边的“变换”部分检查
只想知道 xcode 项目中事件可执行文件的目的是什么? 谢谢 索拉布 最佳答案 自己找到了..希望它会帮助某人。 您可以在其中运行和测试软件产品的可执行环境。可执行环境定义了应该用来运行产品的程序。
刚回到我的办公 table ,Xcode 一直在文件中突出显示/强调空白区域。如果我输入一些东西它就会消失,但如果我切换标签并回来,它们会重新出现。 更新:这不是由“显示隐形”选项引起的。那看起来不一
我首先注意到这一点 Cmd-/偶尔拒绝为注释取消注释的代码行工作。但是现在(刚刚使用 XCode 4.1,虽然这可能无关)它发生在 Cmd-B建立。 我无法弄清楚我正在做什么导致这种情况,或者是否有任
我不太了解Xcode 4的工作区的实用程序。它们的用途是什么,它们如何帮助Xcode进行开发? 最佳答案 例如。您有一个在两个应用程序中使用的库。您很可能为此库拥有一个自己的项目,对吗?现在,您可以自
我正在关注一个应用程序教程,它说: “接下来,在 Xcode 应用程序项目目录的根目录下创建一个空文件,并调用该文件 Podfile。使用您喜欢的文本编辑器打开它,然后在其中粘贴以下行:” 我很困惑这
我是一名优秀的程序员,十分优秀!