Отображение сетчатки и [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 вам не нужно устанавливать значение шкалы самостоятельно. ОС будет обрабатывать точки для перевода пикселей.