2016-04-14 24 views
8

Ich versuche, PPI (Pixel pro Zoll) in iOS zu finden.So finden Sie PPI programmatisch mit Präzision

konnte ich keinen direkten Weg finden, dies zu fragen, wie wir

UIScreen.mainScreen().bounds 

Es gibt eine way to do it von Skala mit Standardgenerika PPI für iPhone Multiplikation ist (163) oder iPad (132) für die Anzeigegröße zu tun, aber es ist nicht genau.

Wenn die Formel rechts, dann ist PPI von iPhone 6 Plus ist 489 aber in Wirklichkeit die PPI 401 Hier ist die reference

Vorerst scheint es, wie Hardcoding ist der Weg zu gehen.

Aber ich möchte es mit einer Formel programmatisch tun.

Antwort

2

Ich glaube, es gibt keine öffentliche API, um entweder PPI oder die physische Größe eines Bildschirms zu erhalten.

Die einzige Möglichkeit besteht darin, die Liste der Geräte mit ihren physischen Größen und/oder PPI zu codieren (und Sie können einen Gerätetyp aus der UIDevice-Klasse erhalten).

BTW. Hier ist die Frage, die ziemlich die gleiche Sache (unterschiedliche Weise) fragt: How do ruler apps stay accurate on all devices?

+0

Ich denke, wir können die physikalische Größe des Bildschirms in Punkten '[UIScreen mainscreen] .bounds.size "aber wie viele Pixel pro Punkt kann für alle Geräte außer iPhone 6 plus gefunden werden, da es nicht wie normale PPI * Skala gefunden werden kann, weil iPhone 6 Plus & iPhone 6s plus hat neuen Bildschirm namens Retina eingeführt HD ... Also ich denke der beste Weg wäre zu überprüfen, ob das Gerät iPhone 6 plus 4 ist 01 und für den Rest der Geräte können wir mit der Formel gehen, die ich denke ... –

+0

Eine Möglichkeit, iPhone 6 & iPhone 6s programmatisch zu erkennen (http://StackOverflow.com/a/26400686/730807) –

2

Ich habe gerade eine meiner alten ObjC Bibliotheken zu Swift portiert und aktualisiert. Sie können es verwenden oder Teile des benötigten Codes verwenden. Holen Sie es hier: https://github.com/marchv/UIScreenExtension.

Die Bibliothek verwendet UIScreen.main.nativeScale, um von Pixels Per Inch (PPI) in Punkte pro Zoll zu konvertieren.

die Bibliothek mit Cocoapods installieren und dann importieren:

import UIScreenExtension 

Und dann Gebrauch machen:

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

Es ist es wert Erwähnen, dass UIScreenExtension PPI für iPad 2 und iPad Mini 1. Generation falsch berichtet. Diese sollten 132 bzw. 163 sein, da diese beiden Geräte nicht 2x Retina waren. –

+0

@step_jac Ich habe dich zuerst missverstanden - komm besser Kaffee bevor du frühmorgens liest: D OK Ich kann das Problem jetzt sehen - werde es so schnell wie möglich reparieren - danke, dass du es aufgezeigt hast –