2013-01-25 485 views
3

如何以英寸爲單位以編程方式獲得屏幕尺寸(例如iPhone 4,3.5英寸)。以英寸爲單位獲取iPhone的實際屏幕尺寸

我發現了一種通過檢測iPhone/iPad模型來實現它的方法,但硬編碼並不是我想要的,所以我看起來不像那樣。

+0

爲什麼,對於Chtulhu的愛,你會希望出現這種情況?我只是在開玩笑,但這個要求肯定表明你在錯誤的軌道上。並在英寸,甚至... – katzenhut

+0

@katzenhut我不記得它被稱爲,但有一個公式來計算基於屏幕尺寸的最佳視頻比特率。所以就是這個原因。現在回頭看看,我很高興我沒有硬編碼或使用像MCKapur建議的硬編碼庫,因爲此後又有5個iPhone發佈,還有更多新的iOS設備發佈。 –

+0

@ katzenhut:在屏幕上顯示一英寸的標尺,實際上是一英寸長。 – gnasher729

回答

3

這將查找設備的屏幕對角線尺寸:

float scale = [[UIScreen mainScreen] scale]; 

float ppi = scale * ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? 132 : 163); 

float width = ([[UIScreen mainScreen] bounds].size.width * scale); 
float height = ([[UIScreen mainScreen] bounds].size.height * scale); 

float horizontal = width/ppi, vertical = height/ppi; 

float diagonal = sqrt(pow(horizontal, 2) + pow(vertical, 2)); 

diagonal將包含屏幕的對角線尺寸(以英寸爲單位)。

+1

這將與iPhone 6/+一起工作嗎? –

+0

這是否真的爲所有設備提供了正確的價值?這樣我們就可以找出設備的屏幕尺寸,但是每個人都在論壇上講這是不可能的。 –

+1

不適用iOS設備的屏幕範圍廣泛,具有不同的PPI計數:132,264,326和401.據我所知,您無法使用SDK從設備獲取PPI。我看到的唯一選擇是將每個設備名稱與適當的PPI進行映射。 – psobko

4

我找到了一個不錯的GitHub的項目稱爲 'GBDeviceInfo':

if ([GBDeviceInfo deviceDetails].display == GBDeviceDisplayiPhone35Inch) { 
    //3.5 inch iphone 
} 
else if ([GBDeviceInfo deviceDetails].display == GBDeviceDisplayiPhone4Inch) { 
    //4 inch iphone 
} 
else if ([GBDeviceInfo deviceDetails].display == GBDeviceDisplayiPad) { 
    //ipad 
} 

這裏「提斯:GBDeviceInfo

+0

這是處理此問題的唯一正確方法:瞭解哪個設備是哪個設備。謝謝! –

0

斯威夫特4版的屏幕

let scale = UIScreen.main.scale 

    let ppi = scale * ((UIDevice.current.userInterfaceIdiom == .pad) ? 132 : 163); 

    let width = UIScreen.main.bounds.size.width * scale 
    let height = UIScreen.main.bounds.size.height * scale 

    let horizontal = width/ppi, vertical = height/ppi; 

    let diagonal = sqrt(pow(horizontal, 2) + pow(vertical, 2)) 
    let screenSize = String(format: "%0.1f", diagonal)