2013-04-29 47 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); 

這應該回到你點的大小(數量*號每點像素)。