Подтвердить что ты не робот

Получите ppi iPhone/iPad/iPod Touch во время выполнения

Кто-нибудь знает, есть ли способ получить плотность экрана (ppi) устройства во время выполнения? Было бы неплохо не требовать жесткого кодирования различных плотностей в случае, если яблоко переключит его в будущем...

4b9b3361

Ответ 1

Я слишком долго искал это, и, кажется, нет простого способа получить dpi. Однако документация для UIScreen говорит, что немасштабированная точка равна 1/160 дюйма дюйма.

Итак, в основном, если вы хотите использовать dpi, вы можете умножить масштаб на 160.

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

(Оператор if с responsesToSelector должен поддерживать код, работающий для более старых версий iOS, которые не имеют этого свойства)

Согласно Википедии, iPhone составляет 160 точек на дюйм, iPhone с дисплеем сетчатки - 326, а iPad - 132. Таким образом, IPad dpi не является особенно точным с использованием этой формулы, хотя iPhone довольно хорош. Если вам нужна более высокая точность для известных устройств, вы можете жестко задавать dpi для известных устройств с коэффициентом 1/160 как резерв для чего-либо в будущем.

  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;
  }

Это не идеальный вариант, и я бы не прочь увидеть лучшее решение самостоятельно, но это лучшее, что я мог найти.