0

两个文件“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");
}   
4

2 回答 2

1

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

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

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

于 2013-04-29T23:20:42.647 回答
0

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

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

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

于 2013-05-08T09:56:34.440 回答