2016-06-25 8 views
2

Я создал UIImageView в IB с режимом содержания Aspect Fit. Затем я загружаю большое изображение в это представление из URL-адреса.Изменение размера рамки UIImageView после scaleAspectFit

@IBOutlet weak var pictureView: UIImageView! 

NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, _, error) -> Void in 
guard let data = data where error == nil, 
     let image = UIImage(data: data) 
     else { 
      print(error?.localizedDescription) 
      return 
} 

pictureView.image = image 
pictureView.clipsToBounds = true 
setNeedsLayout() 
layoutIfNeeded() 

}).resume() 

В изображение загружается в в UIImageView и Аспект Fit изменяет размер изображения правильно, чтобы отобразить все это в кадре, однако рама UIImageView устанавливается в размер исходного большого изображения. У меня есть эта огромная рамка, обертывающая это изображение с меньшим размером. Мне нужен фрейм UIImageView, чтобы плотно обернуть Aspect Fit UIImage, отбросив все мое другое форматирование.

Huge frame

Нужно ли мне как-то рассчитать новый размер кадра вручную для UIImageView, или я пропускаю установку где-нибудь?

EDIT:

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

pictureView.frame = AVMakeRectWithAspectRatioInsideRect(picture.size, pictureView.frame) 

и ...

pictureView.frame = CGRectMake(self.pictureView.frame.origin.x, self.pictureView.frame.origin.y, pictureImage.size.width, pictureImage.size.height) 

И я также пытался играя с настройками сопротивления сжатию.

ответ

1

Ну, есть несколько вещей, которые задействованы.

Зависимости:

1) Размер изображения. Если отношение высоты/ширины изображения не больше или равно отношению высоты/ширины ImageView, тогда будет показано черное пространство, так как будет меньше отношения к ImageView.

2) Я не уверен в ограничениях вашего изображения, поскольку я вижу, что это @IBOutlet.

Я запутался в вашем предложении «однако рамка UIImageView установлена ​​на размер оригинального большого изображения. У меня этот огромный кадр, обертывающий это изображение с меньшим размером».

Я считаю, что то, что вы хотите сделать, это установить изображение в изображениеView, но кажется, что вы устанавливаете UIImageView в размер изображения, а затем изображение в UIImageView, что делает его действительно запутанным для отладки. Не могли бы вы объяснить более подробно, что именно вы хотите?

EDIT

Существует ImageView с рамкой - этот кадр никогда не будет отличаться.

contentMode изменится, как изображение отображается на ImageView

UIViewContentModeScaleAspectFit В и UIViewContentModeScaleAspectFill режимы масштабирования изображения в соответствии или заполнить пространство, сохраняя при этом исходное соотношение сторон изображения.

Значение UIViewContentModeScaleToFill масштабирует изображение без учета исходного соотношения сторон, что может привести к искажению изображения.

UIViewContentModeScaleToFill Возможность масштабировать контент, чтобы он соответствовал самому размеру, если необходимо изменить пропорции содержимого. * (Не рекомендовал бы для большинства случаев)

UIViewContentModeScaleAspectFit Возможность масштабирования контента, чтобы соответствовать размеру точки зрения, сохраняя пропорции. Любая оставшаяся область границ обзора прозрачна. * (Это гарантирует, что полное изображение помещается на экране. Таким образом, если изображение меньше отношения, чем экран, то будет черным цветом на некоторых краях, либо верх/низ или левый/правый)

UIViewContentModeScaleAspectFill Возможность масштабирования содержимого для заполнения размера представления. Некоторая часть содержимого может быть обрезана для заполнения границ представления. * (Это гарантирует, что был выбран ВСЕЙ ИЗОБРАЖЕНИЕ)

+0

Я имею в виду, что, по-видимому, происходит то, что iOS устанавливает изображение в 'UIImageView' с фреймом, установленным в полном размере исходного изображения до Aspect Установите размер. У меня есть 'UIImageView' внутри' UIView', с ограничениями по всем ребрам. Отношение изображения будет отличаться иногда от того, что предписано 'UIImageView'. Мне нужно, чтобы макет был достаточно гибким, чтобы справиться с этим. Изображения не должны сбрасываться с левого/правого краев, но также не должны заполнять все эти рамки. – Fook

+0

Мой вопрос в двух словах: когда «UIImageView» изменяет размер с помощью Aspect Fit, почему кадр не сворачивается в эти новые измерения, а не остается фиксированным? Как изменить размер изображения? – Fook

+0

Что делать, если вы изменили contentMode с 'ScaleAspectFit' на' ScaleAspectFill' – impression7vx

Смежные вопросы