如何处理iPhone 5的屏幕尺寸?

可能重复:
如何开发或迁移iPhone 5屏幕分辨率的应用程序?

我只是想知道如何处理iPhone 5更大的屏幕尺寸。

由于它具有更多的像素高度,像GCRectMake这样的使用坐标(并且将像素与视网膜/非视网膜问题加倍)的东西无法在各版本之间无缝工作,就像我们获得视网膜时发生的那样。

我们将不得不设计两个故事板,就像iPad一样?

我个人并不认为苹果每次需要画画时都会要求您检查屏幕大小,就像许多答案所说的那样。 这是否发生在iPad上?


从我在今天的演示中可以看出的所有应用程序将继续在垂直延伸的屏幕上工作。 他们将被信箱或基本上额外的88点高度将只是黑色。

如果您只打算支持iOS 6+,那么一定要考虑使用自动布局。 它删除所有固定的布局处理,而是使用约束来处理事情。 没有东西会被硬编码,你的生活会变得更简单。

但是,如果您必须支持较老的iOS,那么它确实取决于您的应用程序。 大多数使用标准导航栏和/或标签栏的应用程序可以简单地扩展中间的内容以使用该额外的点。 将中心内容的自动识别蒙版设置为在两个方向上展开。

view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

不过,如果您的应用使用了像素完美的布局来显示内容,那么它对于表格视图来说非常适用,然而,您最好的选择是重新构想内容,以便它可以适应不同的高度。

如果这不可能,那么唯一剩下的选择是拥有两个UI(iPhone 5和iPhone 5之前)。

如果这听起来很丑,那么你可以使用默认的信箱模式,其中额外的点/像素显示黑色。

编辑

要使您的应用程序能够与iPhone 5配合使用,您需要添加视频版本的启动器映像。 它应该被命名为Default-568h@2x.png 。 它必须是视网膜质量 - 这里没有向后兼容性:)

您也可以从Xcode中选择此图像。 转到目标,然后在摘要部分中查找启动映像。 图像尺寸必须为640x1136像素。 这里有一个截图,可以找到它,如果有帮助。

Xcode截图


您需要添加640x1136像素的PNG图像( Default-568h@2x.png )作为您的项目的4英寸默认闪Default-568h@2x.png图像,并且会使用额外的空间(不需要简单的基于表格的应用程序,游戏需要更多的努力) 。

为了处理所有屏幕分辨率,我创建了一个小型UIDevice类别。 你可以在这里得到它,但代码如下:

文件UIDevice + Resolutions.h:

enum {
    UIDeviceResolution_Unknown           = 0,
    UIDeviceResolution_iPhoneStandard    = 1,    // iPhone 1,3,3GS Standard Display  (320x480px)
    UIDeviceResolution_iPhoneRetina4    = 2,    // iPhone 4,4S Retina Display 3.5"  (640x960px)
    UIDeviceResolution_iPhoneRetina5     = 3,    // iPhone 5 Retina Display 4"       (640x1136px)
    UIDeviceResolution_iPadStandard      = 4,    // iPad 1,2,mini Standard Display   (1024x768px)
    UIDeviceResolution_iPadRetina        = 5     // iPad 3 Retina Display            (2048x1536px)
}; typedef NSUInteger UIDeviceResolution;

@interface UIDevice (Resolutions)

- (UIDeviceResolution)resolution;

NSString *NSStringFromResolution(UIDeviceResolution resolution);

@end

文件UIDevice + Resolutions.m:

#import "UIDevice+Resolutions.h"

@implementation UIDevice (Resolutions)

- (UIDeviceResolution)resolution
{
    UIDeviceResolution resolution = UIDeviceResolution_Unknown;
    UIScreen *mainScreen = [UIScreen mainScreen];
    CGFloat scale = ([mainScreen respondsToSelector:@selector(scale)] ? mainScreen.scale : 1.0f);
    CGFloat pixelHeight = (CGRectGetHeight(mainScreen.bounds) * scale);

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        if (scale == 2.0f) {
            if (pixelHeight == 960.0f)
                resolution = UIDeviceResolution_iPhoneRetina4;
            else if (pixelHeight == 1136.0f)
                resolution = UIDeviceResolution_iPhoneRetina5;

        } else if (scale == 1.0f && pixelHeight == 480.0f)
            resolution = UIDeviceResolution_iPhoneStandard;

    } else {
        if (scale == 2.0f && pixelHeight == 2048.0f) {
            resolution = UIDeviceResolution_iPadRetina;

        } else if (scale == 1.0f && pixelHeight == 1024.0f) {
            resolution = UIDeviceResolution_iPadStandard;
        }
    }

    return resolution;
 }

 @end

这是您需要使用此代码的方式。

1)将上面的UIDevice + Resolutions.h&UIDevice + Resolutions.m文件添加到您的项目中

2)将#import“UIDevice + Resolutions.h”行添加到您的ViewController.m中

3)添加此代码以检查您正在处理的设备版本

int valueDevice = [[UIDevice currentDevice] resolution];

    NSLog(@"valueDevice: %d ...", valueDevice);

    if (valueDevice == 0)
    {
        //unknow device - you got me!
    }
    else if (valueDevice == 1)
    {
        //standard iphone 3GS and lower
    }
    else if (valueDevice == 2)
    {
        //iphone 4 & 4S
    }
    else if (valueDevice == 3)
    {
        //iphone 5
    }
    else if (valueDevice == 4)
    {
        //ipad 2
    }
    else if (valueDevice == 5)
    {
        //ipad 3 - retina display
    }

我刚刚完成更新,并将iOS 6.0版本的某个应用发送到商店。 该版本与iOS 5.0向后兼容,因此我保留了shouldAutorotateToInterfaceOrientation:方法并添加了如下所示的新方法。

我必须做到以下几点:

自动旋转在iOS 6中发生变化。在iOS 6中,不推荐使用UIViewController的shouldAutorotateToInterfaceOrientation:方法。 在它的地方,你应该使用supportedInterfaceOrientationsForWindow:shouldAutorotate方法。 因此,我添加了这些新的方法(并保持与iOS 5兼容的旧版本):

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAllButUpsideDown;    
}
  • 使用视图控制器的viewWillLayoutSubviews方法,并使用视图的边界矩形调整布局。
  • 模态视图控制器: willRotateToInterfaceOrientation:duration:
    willAnimateRotationToInterfaceOrientation:duration: ,and
    didRotateFromInterfaceOrientation:不再在任何视图控制器上调用方法,该视图控制器通过全屏演示
    本身 - 例如, presentViewController:animated:completion:
  • 然后我修复了需要它的视图的自动布局。
  • 将模拟器中用于启动视图和视图的图像复制到PhotoShop中,并将它们导出为png文件。
  • 默认图像的名称是: Default-568h@2x.png ,大小是640×1136。 它也允许为相同的肖像模式提供640×1096(取消状态栏)。 如果您的应用仅允许在iPhone上横向摆放,则也可以横向模式提供相似尺寸。
  • 我已经降低了iOS 4的向后兼容性。主要原因是因为对armv6代码的支持已经被删除。 因此,我现在能够支持的所有设备(运行armv7 )都可以升级到iOS 5。
  • 我也是一代armv7s代码来支持iPhone 5,因此在更新之前不能使用任何第三方框架(如Admob等)。
  • 这是所有,但只记得在iOS 5和iOS 6中测试自旋,因为旋转发生了变化。

    链接地址: http://www.djcxy.com/p/27747.html

    上一篇: how to deal with iPhone 5 screen size?

    下一篇: How to encrypt iPhone upload and download of info?