Как изменить размер UIImageView на основе размера UIImage и подогнать под ширину экрана - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть этот фрагмент кода:

func resizeImageViewToImageSize(_ imageView:UIImageView) {
        let widthRatio = imageView.bounds.size.width / imageView.image!.size.width
        let heightRatio = imageView.bounds.size.height / imageView.image!.size.height
        let scale = min(widthRatio, heightRatio)
        let imageWidth = scale * imageView.image!.size.width
        let imageHeight = scale * imageView.image!.size.height
        print("\(imageWidth) - \(imageHeight)")

        imageView.frame = CGRect(x: 0,
        y: 70,
        width: imageWidth,
        height: imageHeight)
        imageView.center.x = view.center.x
 }

Я вызываю его в viewDidLoad(), чтобы изменить размер моего originalImageView UIImageView:

resizeImageViewToImageSize(originalImageView)

И он успешно изменяет размеры моего UIImageView, нов случае, если я делаю снимок с камеры (например, на iPhone7 +), мои imageWidth и imageHeight равны: 226.4 - 283.0, что делает мой UIImageView очень маленьким в центре экрана, как показано ниже:

enter image description here

То, что я хотел бы сделать, это сделать мой originalImageView больше по ширине и, соответственно, сохранить его масштабное соотношение, как в макете ниже, возможно ли это?

enter image description here

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вам необходимо установить ширину и высоту UIImageView в соответствии с размером, который вы хотите использовать на экране, а затем установить contentMode *1003* на UIView.ContentMode.scaleAspectFit или UIView.ContentMode.scaleAspectFill, если хотитеэто заполнить весь вид.

https://developer.apple.com/documentation/uikit/uiimageview https://developer.apple.com/documentation/uikit/uiview/contentmode/scaleaspectfit

0 голосов
/ 24 сентября 2018

Я думаю, что проблема возникает, когда значение imageView.image!.size.width больше imageView.bounds.size.width или для значений высоты.

Это приведет к widthRatio или heightRatio до значения меньше 1.

И когда ваш scale равен <1 и умножен на ваши <code>imageWidth и imageHeight, вы получите меньший UIImageView, чем исходный.

I 'Я предполагаю, что разрешение изображения, полученного с камеры, такой же «четкой», как у iPhone7, будет высоким.

Вам придется проверить, какое значение выше imageView.bounds.width или imageView.image!.size.width, а затем получитьобратная в зависимости от состояния.

 func resizeImageViewToImageSize(_ imageView:UIImageView) {


    let maxWidth = view.frame.size.width
    let maxHeight = view.frame.size.height

        var widthRatio = imageView.bounds.size.width / imageView.image!.size.width

        if widthRatio < 1 {
            widthRatio = 1 / widthRatio
        }

        let heightRatio = imageView.bounds.size.height / imageView.image!.size.height

        if heightRatio < 1 {
            heightRatio = 1 / widthRatio
        }

        let scale = min(widthRatio, heightRatio)

        let maxWidthRatio = maxWidth / imageView.bounds.size.width
        let maxHeightRatio = maxHeight / imageView.bounds.size.height
        let maxScale = min(maxWidthRatio, maxHeightRatio)

        let properScale = min(scale, maxScale)

        let imageWidth = properScale * imageView.image!.size.width
        let imageHeight = properScale * imageView.image!.size.height
        print("\(imageWidth) - \(imageHeight)")

        imageView.frame = CGRect(x: 0,
        y: 70,
        width: imageWidth,
        height: imageHeight)
        imageView.center.x = view.center.x
 }
...