Загрузка нормального изображения против образа устройства сетчатки (2x) - PullRequest
25 голосов
/ 02 апреля 2011

Когда нам нужно загрузить изображение с какого-то URL-адреса и показать его на двух типах устройств - Retina (с 2-кратным изображением) и обычном устройстве - Должны ли мы иметь два разных URL-адреса изображений для этого?

Для изображений в пакете ресурсов мы сохраняем и xyz.png, и xyz@2x.png, и все работает нормально.

Для изображений, которые мы извлекаем с сервера, нужно ли иметь отдельные URL-адреса изображений для обоих типов изображений и кэшировать их локально с одинаковым соглашением об именах (xyz.png и xyz@2x.png)?

Пожалуйста, пролите немного света здесь.

Ответы [ 2 ]

24 голосов
/ 02 апреля 2011

Вы можете проверить, имеет ли устройство дисплей с высоким разрешением сетчатки и на основании этого загрузить другое изображение. Не беспокойтесь о фотографиях и других материалах, которые вы все равно масштабировали бы в зависимости от размера интерфейса.
Вы можете создать уменьшенную версию загруженного изображения с помощью

UIImage *image = //download...
image=[UIImage imageWithCGImage:[image CGImage] scale:2.0 orientation:UIImageOrientationUp];

Имейте в виду, что масштабированное изображение 100x100 станет изображением размером 50x50 точек (со шкалой 2,0).

Сначала проверьте, есть ли у вас дисплей сетчатки

BOOL retina = NO;
if([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
    retina = [[UIScreen mainScreen] scale] == 2.0 ? YES : NO;
0 голосов
/ 27 мая 2014
CGFloat screenScale = [UIScreen mainScreen].
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:myUrl] scale:screenScale];
...