2010-10-05 14 views

risposta

22

Sono stato a caccia di questo troppo a lungo, e non sembra esserci un modo semplice per ottenere il dpi. Tuttavia, la documentazione per UIScreen dice che un punto non graduato è circa uguale a 1/60 di pollice.

Quindi, in sostanza, se si desidera che il dpi, è possibile moltiplicare la scala da 160.

float scale = 1; 
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { 
    scale = [[UIScreen mainScreen] scale]; 
    } 
    float dpi = 160 * scale; 

(L'istruzione if con respondsToSelector è quello di mantenere il codice di lavoro per le versioni precedenti di iOS che non hanno che la proprietà disponibili)

Secondo Wikipedia, l'iPhone è 163 dpi, un iPhone con un display retina è 326, e l'iPad è 132. Quindi dpi dell'iPad non è particolarmente accurata utilizzando questa formula, anche se l'iPhone di è piuttosto buono. Se si desidera una maggiore precisione per i dispositivi noti, è possibile codificare il dpi per i dispositivi noti, con un rapporto 1/160 come riserva per qualsiasi cosa futura.

float scale = 1; 
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { 
    scale = [[UIScreen mainScreen] scale]; 
    } 
    float dpi; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    dpi = 132 * scale; 
    } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
    dpi = 163 * scale; 
    } else { 
    dpi = 160 * scale; 
    } 

Questo non è proprio l'ideale, e non mi dispiacerebbe vedere una soluzione migliore da solo, ma è il meglio che ho potuto trovare.

+1

questo non funziona per iPad mini, che ha 163 dpi, ma è linguaggio iPad – AlexWien

+0

@AlexWien Hai trovato una soluzione a questo problema? –

+0

@ PhoenixX_2 sì, ma non esiste una soluzione perfetta funziona solo per tutti i mini iPad ancora noti. itvworks con l'ID della macchina. cerca qui "rileva iPad mini" – AlexWien

5

Prova https://github.com/lmirosevic/GBDeviceInfo

int ppi = [GBDeviceInfo deviceInfo].displayInfo.pixelsPerInch;    // #> 326] 

Funziona su iOS e OSX

+1

anche quei valori ppi sono codificati in quel Kit. Se guardi il codice troverai '// 6 Plus @ [@ 7, @ 1]: @ [@ (GBDeviceModeliPhone6Plus), @" iPhone 6 Plus ", @ (GBDeviceDisplay5p5Inch), @ 401],' – ben

Problemi correlati