Чтобы надежно обнаружить дисплей 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, а затем проверяю масштаб экрана:
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
([UIScreen mainScreen].scale == 2.0)) {
// Retina display
} else {
// non-Retina display
}