Retina дисплей и [UIImage initWithData] - PullRequest
50 голосов
/ 20 июля 2010

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

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

Есть идеи?

Ответы [ 6 ]

93 голосов
/ 20 июля 2010

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

UIImage * img = ...;
img = [UIImage imageWithCGImage:img.CGImage scale:2 orientation:img.imageOrientation];
19 голосов
/ 05 декабря 2012

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

7 голосов
/ 02 июля 2013

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

0 голосов
/ 29 марта 2018

Swift3, 4 версия

let image = UIImage(data: imageData, scale: UIScreen.main.scale)
0 голосов
/ 13 февраля 2014

поместите это в свой .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];
0 голосов
/ 20 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...