iphone 5视网膜显示器的图像

时间:2012-09-21 14:21:17

标签: iphone retina-display iphone-5

iPhone 5发布,具有新的屏幕尺寸和分辨率。

当我们使用iPhone 4(视网膜)的图像时,我们刚刚添加了#34; @ 2x"图像名称。 任何人都可以告诉我,是否可以为新的iPhone屏幕添加不同的图像(背景,按钮等)?

第二个问题:我可以在我的应用程序中使用单独的XIB文件:对于旧的iPhone,iPhone新的(如iPhone和iPad)?

谢谢!

5 个答案:

答案 0 :(得分:50)

以下是我的博客中有关此主题的内容:

[UIImage imageNamed:]在视网膜设备上运行时自动加载@ 2x版本的图像。不幸的是,imageNamed:在iPhone 5上运行时不会自动加载-568h @ 2x版本的图像。

有时这无关紧要,例如iPhone 4上的图标和非全屏图形可能是相同的。 5.但是,如果您有全屏幕背景图像,或工具栏等全宽/高度背景图像,您将遇到问题。你的480高图像很可能会被拉伸(结果可能看起来很可怕)。

您可以手动检查屏幕尺寸并加载正确的图像,如下所示:

UIImage* myImage;
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) {
   myImage = [UIImage imageNamed:@"myImage-568h.png"];
} else {
   myImage = [UIImage imageNamed:@"myImage.png"];
}

有一种方法可以改变UIImage imageNamed,使 自动加载正确的图像。请参阅以下链接了解详情。

更多信息:http://pervasivecode.blogspot.co.uk/2012/09/making-apps-work-on-iphone-5-screen-size.html

编辑:@Sound Blaster& @GrizzlyNetch 是正确的,在代码中你应该使用imageNamed:@“myImage-568h.png”]但是实际文件名应该是myImage-568h@2x.png。如果你不这样做,那么比例是不正确的,就像他们说的那样。

答案 1 :(得分:11)

iPhone 5不会引入新的像素密度,因此您可以使用之前使用过的所有视网膜图像。

所有你需要支持的iPhone 5的新分辨率是让你的窗口视图。对于大多数视图,如tableview和scrollview,这不会出现任何问题。

此外,无需为新分辨率添加额外的XIB文件,这也是不受支持的。

只需将Default-568h@2x.png添加到您的应用包即可让iOS 6让您的应用占用iPhone 5中的额外空间。

所有本机控件(如标签栏)的行为都与您期望的一样。

如果您想在app中支持iOS4.3和5. *,请确保nib设置中的Use Autolayout(界面构建器中的第一个选项卡)已关闭。

然后确保您正确设置了视图autoresizingMask

答案 2 :(得分:1)

if([UIScreen mainScreen] .scale == 2.f&& screenHeight == 568.0f) 浮点数的精确比较在任何语言中都不是一个好主意,因为它们存储在内存中的方式存在舍入错误。例如,您不能保证568.0f不存储为567.9999999或568.0000001。使用范围更安全,或者在这种情况下,屏幕高度就足够了> 567.1f。我怀疑即使是iPhone也没有物理支持像素的分数。

答案 3 :(得分:1)

修改

注意,从iOS8 UIScreen开始考虑方向(检查高度可以返回两个值,纵向高度或横向高度,仅在纵向高度之前),但xcassets更好,您可以在此处查看: How to addapt iphone background?

结束编辑

根据ben-clayton的回答,我为iPhone 5管理图像制作了一个方便的类别。谢谢。

+ (UIImage *) imageForName:(NSString *)imageName
{
    NSString *result = imageName;

    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    BOOL isIphoneFive = ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f);

    if (isIphoneFive)
    {
        NSString *imageNameWithoutExtension = [imageName stringByDeletingPathExtension];
        NSString *extension = [imageName pathExtension];

        result = [NSString stringWithFormat:@"%@-568h.%@",imageNameWithoutExtension, extension];
    }

    return [UIImage imageNamed:result];
}

答案 4 :(得分:0)

我目前正在通过这种方式检测当前的设备是否是4英寸iPhone并且效果很好。 HTH

- (BOOL)isiPhone5{
    return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568.0);
}