Программирование на 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, изображение теперь будет отображаться искаженным.
Надеюсь, что это поможет вам