Изменение рамки просмотра изображения в зависимости от выбранного изображения (из средства выбора изображений) SWIFT - PullRequest
0 голосов
/ 03 марта 2019

У меня есть вид изображения, где есть установленный кадр, но когда пользователь щелкает его и изменяет изображение (UIImagePickerController), тогда мне как-то нужно, чтобы кадр вида изображения изменился на кадр изображения.

Когда они нажимают кнопку выбора для своего изображения, это код, который я запускаю.

itemImage.contentMode = .scaleAspectFit
self.itemImage.image = pickedImage as? UIImage

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

Это то, что я имею в виду, что кадр не меняется.

Frame Not Changing

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Мне кажется, что к вашему imageView уже применены некоторые ограничения.Я бы предложил применить к нему ограничения размера.

// declare these at the top of the file so that the constraints can be removed when new images are selected
private var widthConstraint: NSLayoutConstraint?
private var heightConstraint: NSLayoutConstraint?

// remove old constraint
widthConstraint?.isActive = false
// fix the imageview width to that of the picked image
widthConstraint = itemImage.widthAnchor.constraint(equalToConstant: pickedImage.size.width)
widthConstraint?.isActive = true

heightConstraint?.isActive = false
heightConstraint = itemImage.heightAnchor.constraint(equalToConstant: pickedImage.size.height)
heightConstraint?.isActive = true
0 голосов
/ 03 марта 2019

сначала вы должны получить AspectFitSize с помощью этого метода:

public func getAspectFitFrame(from: CGSize, to: CGSize) -> (CGRect, CGFloat) {
    let (hfactor, vfactor, factor) = getFactor(from: from, to: to)

    let newWidth = to.width / factor
    let newHeight = to.height / factor

    var x: CGFloat = 0.0
    var y: CGFloat = 0.0

    if hfactor > vfactor {
        y = (from.height - newHeight) / 2
    } else {
        x = (from.width - newWidth) / 2
    }
    return (CGRect(x: x, y: y, width: newWidth, height: newHeight), factor)
}

public func getFactor(from: CGSize, to: CGSize) -> (CGFloat, CGFloat, CGFloat) {
    let hfactor = to.width / from.width
    let vfactor = to.height / from.height
    return (hfactor, vfactor, max(hfactor, vfactor))
}

, после чего вам следует изменить ваш imageViewSize с помощью newSize:

let (imageFitSize , _) = getAspectFitFrame(from : self.itemImage.frame.size , to : self.itemImage.image.size)
self.image.frame.size = imageFitSize.size
...