Предоставляет ли iOS SDK простой способ проверить, есть ли у currentDevice дисплей с высоким разрешением (сетчатка)?
Лучший способ сделать это сейчас:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
}
ios
iphone
retina-display
uiscreen
Пьер Валаде
источник
источник
Ответы:
Чтобы надежно обнаружить дисплей Retina на всех устройствах iOS, необходимо проверить, работает ли устройство под управлением iOS4 + и
[UIScreen mainScreen].scale
равно ли это свойство значению 2.0. Вы НЕ МОЖЕТЕ предположить, что устройство работает под управлением iOS4 +, еслиscale
свойство существует, поскольку iPad 3.2 также содержит это свойство.На iPad под управлением iOS3.2 масштаб вернется к 1,0 в режиме 1x и к 2,0 в режиме 2x - хотя мы знаем, что устройство не имеет дисплея Retina. Apple изменила это поведение в iOS4.2 для iPad: она возвращает 1.0 в режимах 1x и 2x. Вы можете проверить это самостоятельно в симуляторе.
Я проверяю
-displayLinkWithTarget:selector:
метод на главном экране, который существует в iOS4.x, но не iOS3.2, а затем проверяю масштаб экрана:источник
[UIDevice currentDevice].systemVersion]
. В этом случае это будетNSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion]; return [currentSystemVersion compare:version options:NSNumericSearch];
Ответ @ sickp правильный. Просто, чтобы упростить задачу, добавьте эту строку в файл Shared.pch:
Тогда в любом файле вы можете просто сделать:
источник
источник
?1:0
? Разве это не просто повторение того, что уже было вычислено в логической части выражения?Вот удобное быстрое расширение:
Обновление для Swift v5:
Использование:
Оригинал:
Использование:
источник
Этот фрагмент ...
Вернется ... 0 для iPhone / iPod touch со стандартным разрешением, 1 для iPhone с сетчаткой, 2 для iPad со стандартным разрешением, 3 для iPad с сетчаткой.
источник
SSToolkit имеет метод, который делает это:
http://sstoolk.it/documentation/Categories/UIScreen(SSToolkitAdditions).html
Он используется следующим образом:
источник
Всегда немного глупо сравнивать значения с плавающей точкой на равенство. Я предпочитаю идти на любой
или
источник
isRetina = [UIScreen mainScreen].scale > 1.95
. Это также даст преимущество в том, что вы будете устойчивы, когда придет @ 4x :)Это риф на ответ Мэтта MC выше. Просто категория на
UIScreen
.источник
alreadyChecked
является бесплатным, но это нормально.Быстрая версия ответов выше, со шкалой> = 2.0, поэтому она включает iPhone 6+ и другие будущие устройства со шкалой выше, чем Retina:
источник
Просто чтобы объединить ответ от @sickp и следующий комментарий от @ n13, я превратил это в категорию UIScreen, которая, кажется, работает хорошо. Проверка выполняется при первом вызове, а затем сохраняется для последующих вызовов.
Может быть кому-то пригодится.
источник
(Util)
вместо(RetinaCheck)
... возможно, это менее ясно, но это пригодно для других целей. Также я бы назвал методisRetinaDisplay
или что-то, что начинается сis
, но, возможно, я никогда не понимал руководящие принципы для Obj-C. Кроме того, я фанат,> 1.0
но кто знает, в чем будет смысл двигаться вперед.источник
попробуй это
источник
Модифицированная версия primulaveris для простоты наиболее распространенных вариантов использования. Я на быстром 2.2, но это не должно иметь значения.
Тогда просто используйте их как это
источник
Это сработало для меня
источник