处理iPhone5与iPhone4的xib中不同大小的图像?

之前在这里发布的关于迁移到iPhone 5的post中,只提到了添加一个新的尺寸启动图像*,如果需要的话也许使用AutoLayout。

但是我有几个xibs,其中有一个填充整个屏幕的背景图像(也许根据视图减less导航和标签栏)。 为了支持iPhone 5,我现在需要不同的屏幕尺寸的图像,这是怎么处理在xib或其他地方?

(*顺便说一句,如果应用程序不使用启动图像,你会怎么做?)

这是一个实际上可以帮助你的链接。 保存启动图像,如果在文件名末尾加上“-568h@2x.png”,iOS不会自动select正确的图像。 在上面的链接中提到了一些辅助方法,可以使你的工作变得简单。

我已经采用了上面提到的链接中的代码,这里是Obj-C的帮助函数:

-(BOOL) IsTall { return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) && ([[UIScreen mainScreen] bounds].size.height * [[UIScreen mainScreen] scale] >= 1136); } 

一个小类别写作也会有帮助。

 @interface NSString (Special) -(NSString*)correctImageNameForiPhone5 @end @implementation NSString (Special) -(NSString*)correctImageNameForiPhone5 { if([self isTall]) return -imageNameAppendedWith_-568h@2x.png_-; //Do the correct NSString magic here else return -originalImageName-; } @end 

最后,当你访问UIImage对象时:

 NSString *filename = @"backgroundImage.png"; UIImage *img = [UIImage imageNamed:[filename correctImageNameForiPhone5]]; 

这里的假设是,你将所有的iPhone5特定的图像文件名称以“-568h @ 2x”结尾。 这个代码示例绝对不会工作,如果你只是把它放到你的项目,但你明白了。 它需要一些NSString修复程序。