2010-07-07 57 views
0

當我試圖在我的通用iPhone/iPad應用程序中獲取屏幕尺寸時,出現一些奇怪的問題。有沒有一種安全的方式來查找通用應用程序中的像素顯示大小?

我是第一次使用

[UIScreen mainScreen]界限]

但它並不適用於iPhone 4(至少不是在模擬器)返回正確的大小,它只是返回小320x480適用於所有iPhone

然後,我改變到

CGSize屏幕尺寸= mainscr.currentMode.size;

而且它在模擬器上適用於所有蘋果設備,但在iPhone 3GS的設備上運行這條線時,該程序具有SIGABRT

設備運行3.1.2

任何想法如何獲得退出顯示器的像素尺寸是否在設備安全的方式?

回答

3

UIScreen.currentMode不可用< 3.2,所以你需要檢查-respondsToSelector:

CGSize screenSize; 
if ([mainscr respondsToSelector:@selector(currentMode)]) 
    screenSize = mainscr.currentMode.size; 
else 
    screenSize = mainscr.bounds.size; 

同樣,UIScreen.scale不提供< 4.0,如果你使用的是,隨着-respondsToSelector: 檢查。

CGFloat scale = [mainscr respondsToSelector:@selector(scale)] ? mainscr.scale : 1.0f; 
+0

非常好,這個作品完美!謝謝 :) – sinsro 2010-07-07 09:17:57

3

[UIScreen mainScreen]界限]返回沒有像素值,但你可以使用尺度參數的分辨率轉換爲像素。

+0

我假設你的意思是檢查[UIScreen mainScreen] .scale的值;好吧,看起來這不適用於使用3.1.2的設備,所以我得到一個SIGABRT,就像我對第一種方法所做的那樣。爲了這是真正的設備安全,我需要一種方法來檢測分辨率,無論它在哪個設備/ os上運行...... – sinsro 2010-07-07 09:01:07

0

想想正確的方法是屏幕分辨率IS 320x480,但顯示比例爲2.0。意識到這很可能在未來的「其他」蘋果設備將有其他的顯示比例..想象的例子,具有1.5的比例的新的iPad有一天...

if([[UIScreen mainScreen] respondsToSelector:@selector"scale"]) { 
     displayScale = [[UIScreen mainScreen] scale]; } 

他們這樣做的原因是爲了便於編寫適用於任何設備的應用程序。你可以在屏幕上放置一個100,100的對象,它將在兩個設備上的相同位置。使用@ 2x命名方法提供兩組圖像,一個是1x刻度,另一個是2x刻度。

相關問題