2016-04-14 2 views
8

J'essaie de trouver PPI (Pixels Per Inch) dans iOS.Comment trouver PPI avec précision par programme

Je ne pouvais trouver aucune façon directe à interroger ce que nous faisons pour la taille d'affichage

UIScreen.mainScreen().bounds 

Il y a un way to do it en multipliant l'échelle avec IPP générique standard pour iPhone (163) ou iPad (132), mais ce n'est pas exact.

Si la formule est à droite, puis PPI de iPhone 6 plus est 489 mais en réalité, l'PPI est de 401 Voici le reference

Car il semble maintenant comme hardcoding est le chemin à parcourir.

Mais je voudrais le faire par programmation en utilisant une formule.

Répondre

2

Je crois qu'il n'y a aucune API publique pour obtenir l'IPP ou la taille physique d'un écran. Le seul moyen est de lister en dur la liste des périphériques avec leurs tailles physiques et/ou leurs PPI (et vous pouvez obtenir un type de périphérique en dehors de la classe UIDevice).

BTW. Voici la question qui est à peu près la même chose (différente): How do ruler apps stay accurate on all devices?

+0

Je suppose que nous pouvons la taille physique de l'écran en points '[UIScreen mainScreen] .bounds.size' mais combien de pixels par point peuvent être trouvés pour tous les appareils sauf iPhone 6 plus car il ne peut pas être trouvé comme PPI * échelle normale parce que iPhone 6 plus et iPhone 6s plus a présenté un nouvel écran appelé Retina HD ... donc je pense que le meilleur moyen serait de vérifier si l'appareil est iPhone 6 plus puis retour 4 01 et pour le reste des appareils, nous pouvons aller de l'avant avec la formule que je suppose ... –

+0

Un moyen de détecter l'iPhone 6 et iPhone 6s par programme (http://stackoverflow.com/a/26400686/730807) –

2

Je viens de porter et mettre à jour une de mes anciennes bibliothèques ObjC à Swift. Vous pouvez l'utiliser ou prendre des parties du code dont vous avez besoin. Obtenez-le ici: https://github.com/marchv/UIScreenExtension.

La bibliothèque utilise UIScreen.main.nativeScale pour convertir des pixels par pouce (PPI) en points par pouce.

Installez la bibliothèque à l'aide Cocoapods puis l'importer:

import UIScreenExtension 

Et puis faire usage:

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

Il vaut la peine mentionnant que UIScreenExtension fait une fausse déclaration de PPI pour iPad 2 et iPad Mini 1ère génération. Ceux-ci devraient être respectivement de 132 et 163 car ces deux appareils n'étaient pas @ 2x rétine. –

+0

@step_jac J'ai d'abord mal compris votre commentaire - mieux vaut prendre un café avant de lire tôt le matin: D OK, je peux voir le problème maintenant - le réparera dès que possible - merci de le signaler –