xcode 6资产目录iphone 6

这个问题仍未得到解答。 使用资产目录时,设备特定(非通用),选项为1x,2x,r 2x,3x。 1x是不必要的,因为它不是视网膜。 2x是ip4的好处,res为640×960。 r 2x是ip5的好处,res为640×1136。 3x是ip6plus,分辨率为1242×2208。

现在,当我运行ip6的模拟器(而不是ip6plus!)时,它使用2x图像(ip4为640×960 res)并且它也没有升级来填充屏幕(由于比率不适合,这无论如何都没有意义)。

有没有人找到适当的指南来设置新手机的背景图像? 我并不是说各种res大小如何缩放的解释,这是明确的,但如何解决xcassets图像与@2x共享ip4和ip6之间明显不匹配的问题? 谢谢!

编辑: Xcode资产目录支持3.5“,4”和4.7“@ 2x图像?类似的问题,但没有真正解决,只是通过使用通用而不是设备特定的解决方法。任何人都知道更好的方法?

自2014年11月中旬以来,我已经向Apple报告了一个关于此问题的错误,我刚刚注意到它们将其标记为No Value …这让我觉得Apple已故意为iPhone 6省略了一个额外的插槽。 我猜他们现在想要将2x插槽用于iPhone 6,也许他们正在减少对iPhone 4s的支持,因为它已经老了。

如果你真的想继续支持iPhone 4s,我建议在2x插槽中使用iPhone 6大小的图像,然后使用以下方法加载你的图像:

+(UIImage *)loadImageNamed:(NSString *)imageName { CGSize screenSize = [UIScreen mainScreen].bounds.size; CGFloat screenHeight = MAX(screenSize.width, screenSize.height); CGFloat const IPHONE_4_SCREEN_HEIGHT = 480; UIImage *image = [UIImage imageNamed:imageName]; if(screenHeight == IPHONE_4_SCREEN_HEIGHT) { CGFloat const xScale = .85333333;//x conversion ratio from iPhone 6's 375 pts width screen to iPhone 4's 320 pts width screen CGFloat const yScale = .71964018;//y conversion ratio from iPhone 6's 667 pts height screen to iPhone 4's 480 pts height screen CGSize newSize = CGSizeMake(xScale * image.size.width, yScale * image.size.height); UIGraphicsBeginImageContextWithOptions(newSize, NO, 0); [image drawInRect:(CGRect){0, 0, newSize}]; UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return resizedImage; } return image; } 

将大图像(iPhone 6)调整为较小的图像(iPhone 4s)即使纵横比不相同也不会损失太多质量。


编辑:

这是Apple Relations对我的错误报告的回答:

没有计划根据以下内容解决此问题:

我们在IB中引入了大小等级。 因此,我们希望开发人员使用带有图像视图的XIB来控制图像的加载和显示方式。 如果他们绝对必须为所有可能的屏幕尺寸提供像素完美图像,那么他们需要做一些像您建议的事情并确定加载自己的特定资源。

我们现在关闭这份报告。

如果您对解决方案有疑问,或者这对您来说仍然是一个关键问题,请使用该信息更新您的错误报告。

对于可能影响此问题的任何更新,请务必定期检查新的Apple版本。

添加640 * 1136的图像,因为ip6有点与ip5而不是ip4成比例,对于iphone 6,还有@ 3x的选项

您无法将@2x图片添加到您的资源中,并希望它适合您的所有尺寸。 例如,背景。 iP4和iP5只是不同,所以你必须使用2个资产regular/@2x用于iP4和regular/@2/@3用于iP5 / 6,因为它们具有相同的比率(通用情况)。

其他方式是设置@2xR4但没有像@ 2x@2x retina因为它会是相同的。