iOS 6.1 XCode 4.6 - imageNamed永远不会返回@ 2x版本

时间:2013-04-29 23:15:13

标签: ios ios-universal-app imagenamed

项目中的“flipImage.png”和“flipImage@2x.png”两个文件都是。在 - [FlipsideViewController viewDidLoad]我有以下代码。理智检查(感谢其他stackoverflowers)正确报告视网膜或没有。但在任何一种情况下,加载的图像都是小图像,由其高度验证。为什么没有适当图像的自动加载?好的,我可以看到解决方法,但我想尽可能使用系统。

UIImage* flipimage = [UIImage imageNamed:@"flipImage.png"];
NSLog(@"Image height = %f", flipimage.size.height);  // always 416, never 832 :(

// Sanity check.
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
([UIScreen mainScreen].scale == 2.0)) {
    NSLog(@"Retina");
} else {
    NSLog(@"Non-retina");
}   

2 个答案:

答案 0 :(得分:1)

iOS视网膜显示器无法正常工作。设备和代码中@ 2x图像和标准分辨率图像的高度相同。当您在屏幕上创建416点×416点的图像时,它不会改变高度,因为它位于视网膜显示屏上而不是非视网膜显示屏上。

不同之处在于,@ 2x图像具有更高的分辨率,因此它们显示每个更多的像素,这是视网膜显示使用的而不是像素。

基本上,您需要做的就是对应用程序中使用的任何图像使用标准分辨率文件名,如果在视网膜显示器上,操作系统将自动将其替换为更高分辨率的图像。

答案 1 :(得分:0)

根据之前的评论......并且无需更改代码,为什么不这样做呢:

UIImage* flipimage = [UIImage imageNamed:@"flipImage.png"];
NSLog(@"Image height = %f", flipimage.size.height * [UIScreen mainScreen].scale);

这应该返回大小(点数*每点的像素数)。