Отображение сетчатки и [UIImage initWithData]

Мне нужно инициализировать изображения из необработанных данных, загруженных с сервера, который обеспечивает правильный размер изображения на основе типа клиента iPhone.

Я знаю, что я должен установить значение масштаба равным 2.0 на дисплее 640x960, однако это свойство readonly и не может быть установлено во время init при использовании initWithData.

Любые идеи?

Ответ 1

Я не знаю ничего, что можно встроить в данные изображения, чтобы сообщить телефону, что это изображение @2x, но что-то вроде этого должно работать:

UIImage * img = ...;
img = [UIImage imageWithCGImage:img.CGImage scale:2 orientation:img.imageOrientation];

Ответ 2

Так как iOS 6.0 UIImage имеет метод + imageWithData:scale:, вы можете передать 2.0 как шкалу для сетчатки.

Ответ 3

Вы можете передать [[UIScreen mainScreen] scale] в качестве параметра масштаба вместо 2.0f.

Ответ 4

поместите это в свой .m, если хотите, или на импортированный класс (синтаксис c лучше при вызове функции IMAO)

BOOL isRetina(){
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        return [[UIScreen mainScreen] scale] == 2.0;
    }
    return NO;
}

Затем при создании изображения с данными сервера:

[UIImage imageWithData:dataFromServer scale:isRetina()?2:1];

Ответ 5

AFAIK вам не нужно устанавливать значение шкалы самостоятельно. ОС будет обрабатывать точки для перевода пикселей.