2013-04-29 27 views
0

项目中的flipImage.png和[email protected] 均为。在 - [FlipsideViewController viewDidLoad]我有以下代码。健康检查(感谢其他stackoverflowers)正确报告视网膜或否。但无论哪种情况,加载的图片都是小图片,通过它的高度进行验证。为什么不自动加载适当的图像?好的,我可以看到解决方法,但我希望尽可能使用系统。iOS 6.1 XCode 4.6 - imageNamed永不返回@ 2x版本

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"); 
} 

回答

1

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

不同的是,@ 2倍的图像具有更高的分辨率,使他们表现出每这就是视网膜显示器使用,而不是像素更多的像素。

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

+0

谢谢,显然检查图像的“大小”不*正确地告诉我哪个文件被加载。事实上,正确的事情已经完成。我需要研究更多的演变模型以及LOGICAL大小(像素)和DISPLAY大小(点数?)之间的区别。这一切都让人想起纵横比的斗争,我曾经在http://www.andrewduncan.ws/aspect的史诗般的咆哮中解决了这个问题。 furrfu! – 2013-04-29 23:51:23

+0

@AndrewDuncan实际上,一旦图像加载到“UIImage”中,无论如何检查大小等,您都无法真正知道使用哪个文件实例化它。如果我的答案对您有帮助,请检查它旁边的复选标记,以便它将关闭这个问题。 – iwasrobbed 2013-04-30 00:33:43

+0

如果你想知道物理点而不是逻辑点的大小,你可以询问UIImage引用的CGImage。 UIImage只是CGImage的一个包装。如果您提供的@ 2x图像等于2,您也可以向UIImage询问他的比例,通常在视网膜显示器中显示。 – Andrea 2013-04-30 06:07:12

0

根据先前的评论...而无需更改代码很多,你为什么不只是这样做:

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

这应该回到你点的大小(数量*号每点像素)。