2016-04-14 8 views
8

Sto cercando di scoprire PPI (Pixel per pollice) in iOS.Come trovare PPI programmaticamente con precisione

non ho potuto trovare alcun modo diretto per interrogare questo come facciamo per le dimensioni del display

UIScreen.mainScreen().bounds 

C'è un way to do it moltiplicando bilancia con PPI generica standard per iPhone (163) o iPad (132), ma non è preciso

Se la formula è giusta allora PPI di iPhone 6 Plus è 489 ma in realtà la PPI è 401 Ecco l'reference

Per ora sembra che hardcoding è la strada da percorrere.

Ma mi piacerebbe farlo in modo programmatico utilizzando una formula.

risposta

2

Credo non ci siano API pubbliche per ottenere PPI o dimensioni fisiche di uno schermo.

L'unico modo è l'elenco di dispositivi con hardcode con le loro dimensioni fisiche e/o PPI (ed è possibile ottenere un tipo di dispositivo fuori dalla classe UIDevice).

BTW. Ecco la domanda che è praticamente chiedere la stessa cosa (modo diverso): How do ruler apps stay accurate on all devices?

+0

Credo che possiamo la dimensione fisica dello schermo in punti '[UIScreen mainScreen] .bounds.size', ma quanti pixel per punto possono essere trovati per tutti i dispositivi tranne iPhone 6 plus perché non possono essere trovati come la normale scala PPI * perché iPhone 6 plus e iPhone 6s plus hanno introdotto un nuovo schermo chiamato Retina HD ... quindi penso che il modo migliore sarebbe controllare se il dispositivo è iPhone 6 Plus e poi tornare 4 01 e per il resto dei dispositivi possiamo andare avanti con la formula Immagino ... –

+0

Un modo per rilevare programmaticamente iPhone 6 e iPhone 6s (http://stackoverflow.com/a/26400686/730807) –

2

Ho appena portato e aggiornato una delle mie vecchie librerie ObjC a Swift. Puoi usarlo o prendere parte del codice che ti serve. Scaricalo qui: https://github.com/marchv/UIScreenExtension.

La libreria utilizza UIScreen.main.nativeScale per convertire da Pixel per pollice (PPI) a Punti per pollice.

installare la libreria utilizzando Cocoapods e quindi importarlo:

import UIScreenExtension 

e poi fare uso di esso:

if let pointsPerCentimeter = UIScreen.pointsPerCentimeter { 
    // code 
} 
+1

Vale la pena menzionando che UIScreenExtension riporta in modo errato PPI per iPad 2 e iPad Mini di prima generazione. Questi dovrebbero essere 132 e 163 rispettivamente poiché questi due dispositivi non erano @ 2x retina. –

+0

@step_jac Ho prima frainteso il tuo commento - meglio prendere un caffè prima di leggere la mattina presto: D OK, ora riesco a vedere il problema - lo aggiusterò al più presto - grazie per avermelo fatto notare –

Problemi correlati