Как NSBundle pathForResource: ofType: и UIImage imageWithContentsOfFile: обрабатывают масштаб и модификаторы устройства?

В моей папке ресурса iOS у меня есть изображения:

foo~iphone.png
[email protected]~iphone.png
foo~ipad.png
[email protected]~ipad.png

Я загружаю их:

NSString *fileName = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:fileName];

Экспериментально:

На iPhone filename есть /path/to/bundle/foo~iphone.png, а на iPhone сетчатки он загружает версию @2x.

На iPad filename есть /path/to/bundle/foo~ipad.png, а на iPad сетчатки он загружает версию @2x.

То есть он загружает изображение, которое я надеюсь, но pathForResource обрабатывает модификатор устройства, а imageWithContentsOfFile обрабатывает модификатор шкалы.

Хотелось бы знать, почему. documentation pathForResource ничего не говорит о модификаторах устройств, а documentation imageWithContentsOfFile ничего не говорит о модификаторах шкалы.

Есть ли отдельная документация, которая точно указывает, что делает каждая функция?

Ответы

Ответ 1

Объяснение imageWithContentsOfFile содержится в связанной документации, а не в самой документации UIImage:

На устройствах с экранами с высоким разрешением методы imageNamed:, imageWithContentsOfFile: и initWithContentsOfFile: автоматически ищут версию запрошенного изображения с модификатором @2x в его имени. Если он найдет один, он загрузит это изображение. Если вы не предоставляете версию изображения с высоким разрешением, объект изображения по-прежнему загружает изображение стандартного разрешения (если оно существует) и масштабирует его во время рисования.

Когда он загружает изображение, объект UIImage автоматически устанавливает свойства размера и масштаба соответствующим значениям на основе суффикса файла изображения. Для изображений с стандартным разрешением он устанавливает свойство scale равным 1.0 и устанавливает размер изображения в пикселях изображения. Для изображений с суффиксом @2x в имени файла он устанавливает для свойства scale значение 2.0 и половину значений ширины и высоты, чтобы компенсировать масштабный коэффициент. Эти значения пополам правильно коррелируют с точечными измерениями, которые необходимо использовать в логическом пространстве координат для рендеринга изображения.

Я не знаю, какая документация объясняет поведение pathForResource.