2016-04-14 12 views
8

Я пытаюсь найти PPI (Pixels Per Inch) в iOS.Как найти PPI программно с точностью

Я не мог найти какой-либо прямой способ запроса это, как мы делаем для размера

UIScreen.mainScreen().bounds 

дисплея Существует way to do it путем умножения масштаба со стандартной родовой PPI для iPhone (163) или IPad (132), но это не точно.

Если формула является правильным, то PPI из iPhone 6 плюс 489, но в действительности ИКО 401 Вот reference

На данный момент кажется, что жестко прописывать это путь.

Но я хотел бы сделать это программно, используя формулу.

ответ

2

Я считаю, что нет никакого публичного API для получения PPI или физического размера экрана.

Единственный способ - указать список устройств с физическими размерами и/или PPI (и вы можете получить тип устройства из класса UIDevice).

BTW. Вот вопрос, который в значительной степени задает одно и то же (по-другому): How do ruler apps stay accurate on all devices?

+0

Я думаю, мы можем физический размер экрана в точках '[UIScreen В начало] .bounds.size', но сколько пикселей на точку может быть обнаружено для всех устройств, кроме iPhone 6 плюс, потому что не может быть обнаружено, как обычная шкала PPI *, потому что iPhone 6 plus & iPhone 6s plus представил новый экран под названием Retina HD ... поэтому я думаю, что лучший способ - проверить, является ли устройство iPhone 6, а затем возвращать 401 a nd для остальных устройств мы можем идти по формуле, я думаю ... –

+0

Способ обнаружения iPhone 6 и iPhone 6s программно (http://stackoverflow.com/a/26400686/730807) –

2

Я только что портировал и обновлял одну из моих старых библиотек ObjC для Swift. Вы можете использовать его или взять части кода, который вам нужен. Получите его здесь: https://github.com/marchv/UIScreenExtension.

В библиотеке используется UIScreen.main.nativeScale для преобразования от Pixels Per Inch (PPI) к точкам на дюйм.

Установите библиотеку с помощью Cocoapods, а затем импортировать его:

import UIScreenExtension 

И затем использовать его:

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

Стоит упомянуть что UIScreenExtension неверно сообщает PPI ​​для iPad 2 и iPad Mini 1-го поколения. Это должно быть 132 и 163 соответственно, поскольку эти два устройства не были 2x 2x сетчатки. –

+0

@step_jac Сначала я неправильно понял, что вы комментируете - лучше выпейте кофе перед чтением рано утром: D ОК. Я вижу проблему сейчас - исправлю ее как можно скорее - спасибо за указание –