Есть ли безопасный способ найти размер дисплея в пикселях в универсальном приложении? - PullRequest
0 голосов
/ 07 июля 2010

У меня возникают странные проблемы при попытке установить размер экрана в моем универсальном приложении для iPhone / iPad.

Я впервые использовал

[[UIScreen mainScreen] границы]

Но он не возвращает правильный размер для iPhone 4 (по крайней мере, не в симуляторе), он просто возвращает 320x480 для всех iPhone

Затем я изменился на

CGSize screenSize = mainscr.currentMode.size;

И он работает в симуляторе для всех устройств Apple, но при запуске этой линии на устройстве iPhone 3GS программа выходит с SIGABRT

Устройство работает 3.1.2

Есть идеи, как получить размер экрана в пикселях безопасным для устройства способом?

Ответы [ 3 ]

3 голосов
/ 07 июля 2010

UIScreen.currentMode недоступно в <3.2, поэтому вам нужно проверить с помощью <code>-respondsToSelector:

CGSize screenSize;
if ([mainscr respondsToSelector:@selector(currentMode)])
  screenSize = mainscr.currentMode.size;
else
  screenSize = mainscr.bounds.size;

Аналогично, UIScreen.scale недоступно в <4.0, если вы используете это, проверьте с помощью<code>-respondsToSelector:.

CGFloat scale = [mainscr respondsToSelector:@selector(scale)] ? mainscr.scale : 1.0f;
3 голосов
/ 07 июля 2010

[[UIScreen mainScreen] bounds] возвращает значение в точках , а не в пикселях , но вы можете использовать параметр масштаба для преобразования разрешения в пикселях.

0 голосов
/ 07 июля 2010

Надо думать, что разрешение экрана составляет 320х480, но с масштабом дисплея 2,0. Поймите, что очень вероятно, что у «других» яблочных устройств в будущем будут другие масштабы дисплея. Представьте себе, например, когда-нибудь новый iPad с масштабом 1,5 ...

  if([[UIScreen mainScreen] respondsToSelector:@selector"scale"]) {
      displayScale = [[UIScreen mainScreen] scale]; }

Причина, по которой они это сделали, состоит в том, чтобы упростить написание приложений, которые работают на любом устройстве. Вы можете поместить объект на экране в 100 100, и он будет в одном и том же месте на обоих устройствах. Используйте метод именования @ 2x, чтобы получить два набора изображений: одно в масштабе 1x, а другое в масштабе 2x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...