Xcode为1x,2x,4“2x和3x资产提供资产存储桶。我的全屏资产在这种配置下都很不稳定,因为2x存储桶用于3.5”和4.7“屏幕。目前我有一个UIImage类别它会检查当前屏幕大小,如果设备看起来像是3.5英寸,则选择“* -3.5”资产。
这很笨重而且不酷。看到Xcode满足其LaunchImage资产的所有不同设备大小,我希望有一些方法可以为非启动图像资产提供特定于设备的资产,而无需借助代码。
答案 0 :(得分:2)
自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 4)即使纵横比不同,也不会损失太多质量。
答案 1 :(得分:0)
在迁移到Xcode 6和iOS 8时使用现有项目会产生一些初始问题。我通过将图片集从Device specific
更改为Universal
来解决了这个问题。这将删除R4图像选项,并为您留下@1x
,@2x
和@3x
。如果您使用例如需要适合屏幕的背景图像,那么我建议您找到一个不必100%完美的图像以使其看起来很好,并将图像设置为Aspect Fill
。< / p>
答案 2 :(得分:0)
我有same problem并且得到了苹果的确认,我必须为此编写代码。例如,您可以尝试这样Fullscreen images on iPhone 6 with Asset Catalogs
但实际上我通过使用一个2x用于4“和4.7”屏幕以及另一个2x用于3.5“屏幕来实现它的懒惰