Программирование на iPhone: как сделать UIImage в шоу UIImageView в реальном размере?

У меня есть UIImage что я хочу показать попиксельно на экране iPhone 4/4S/5. Важно, чтобы он не масштабировался вообще, но когда я пытаюсь использовать setImage, это делает изображение слишком большим.

мой UIImageView сделано в UIStoryboard (так как я действительно новичок в этом) и установлен в режим "перерисовать" со всем остальным по умолчанию. Ни один из других режимов не масштабирует UIImage (РЕДАКТИРОВАТЬ: настройка UIImageViews ContentMode для других вещей не будет работать).

Я посмотрел вокруг и нашел это:

[self.imageView setImage: image];
self.imageView.frame = CGRectMake(self.imageView.frame.origin.x, 
                                  self.imageView.frame.origin.y,
                                  image.size.width, 
                                  image.size.height);

который не работает. Я попытался разделить пополам каждое измерение, и оно все еще выключено

ОБНОВЛЕНИЕ: Я думаю, что оно масштабируется для дисплея сетчатки после того, как на iPhone 4, который я использую, и в режиме симулятора без сетчатки, изображения занимают одинаковый процент экрана. Есть ли какой-нибудь способ, которым я могу установить UIImage или UIImageView или проект для "готовности к сетчатке"?

ОБНОВЛЕНИЕ 2: кажется, что уменьшение изображения вдвое уменьшением каждого размера. IPhone 4 / 4S имеет вдвое больше пикселей, чем 2G/3G/3GS. Но это похоже на хакерское решение, и я даже не уверен, использует ли он плотность пикселей дисплея сетчатки, когда я делаю это.

5 ответов

Если размер вашего UIImage больше, чем размер вашего UIImageView, тогда используйте:

if image.size > imageView.size 

[self.imageView setContentMode:UIViewContentModeScaleAspectFit];

это будет держать ваше изображение в пропорции, в то время как это будет соответствовать в представлении изображения,

но, если размер вашего UIImage меньше размера вашего UIImageView, тогда используйте:

 if image.size < imageView.size 

 self.imageView.contentMode = UIViewContentModeCenter;

он будет держать ваше изображение в центре, пропорционально и в полном размере.

Попробуйте изменить contentMode собственность вашего UIImageView в UIViewContentModeCenter:

self.imageView.contentMode = UIViewContentModeCenter;

Это должно привести к тому, что изображение вообще не масштабируется и будет отображаться в центре UIImageView.

Извините, я как-то забыл об этом вопросе! Ответы были полезны и другими способами, и я попробовал их все, но решение, которое я нашел, заключается в том, что вам нужно пометить любые изображения, которые вы хотите видеть, без масштабирования на дисплее сетчатки, добавив "@2x" перед расширением в файле. название. Например, "foo.png" и "foo@2x.png". Изменение режима контента на что-то вроде UIViewContentModeCenter один не будет работать.

Причина, по которой вам нужно это сделать, заключается в том, что iOS увеличит изображения без сетчатки в UIImageView до 4-кратного размера, чтобы они выглядели одинаково на устройствах с сетчаткой и без сетчатки. Если вы хотите, чтобы он использовал все пиксели, а не увеличивал их масштаб, вы должны указать это в имени файла с помощью "@2x", и он будет использовать это изображение только для устройств Retina.

[self.imageView setContentMode:UIViewContentModeScaleAspectFit];

Это не приведет к масштабированию изображения.

Вы используете код правильно

[self.imageView setImage: image];
self.imageView.frame = CGRectMake(self.imageView.frame.origin.x,     self.imageView.frame.origin.y,
                         image.size.width, image.size.height);

Но вам нужно установить его режим содержания

[self.imageview setContentMode:UIViewContentModeScaleToFill];

Теперь этот UIViewContentModeScaleToFill заполнит представление UIimage изображением. Так как вы установили размер uiimageview такой же, как и для Image, изображение теперь будет отображаться искаженным.

Надеюсь, что это поможет вам

Другие вопросы по тегам