如何将 UIImage 比例调整到 ios swift 中的视图?

How to resize UIImage ratio into view in ios swift?

我正在尝试调整 uiimage 比例。现在我正在以不正确的宽高比将图像变成正方形。如果我将 uiimage 的宽度和高度更改为 pickImage.frame.size.width、pickImage.frame.size.hight,那么 UIImage 看起来会很大。

如果我设置 pickImage?.contentMode = .scaleAspectFit 然后图像设置它的位置但投影显示完整图像视图而不是图像选择一个。 这是我得到的结果截图

并且关闭按钮应该在左上角,这里当我从图像选择器中选择图像时,关闭按钮图像的任何其他位置都设置为基于横向或纵向。 这是我使用的代码:

   func addImage(url : URL) {

    let tag = Int(arc4random_uniform(6))
    pickImage = UIImageView()

    pickImage?.sd_setImage(with:url)
    pickImage?.sd_setShowActivityIndicatorView(true)
    pickImage?.backgroundColor = UIColor.lightGray
    pickImage?.sd_setIndicatorStyle(.gray)

    pickImage?.frame = CGRect(x: randomNumber(inRange: 
   200...Int(touchDrawview.frame.width - 200)), y: Int(getYValue(maxYValue: 
   Int(touchDrawview.frame.height - 200))), width: 200, height: 200)
    pickImage?.autoresizingMask = [.flexibleTopMargin, .flexibleHeight, 
    .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin, 
    .flexibleWidth]
    pickImage?.contentMode = .scaleAspectFit
    pickImage?.tag = tag
    pickImage?.isUserInteractionEnabled = true


    let imageclose = UIImage(named: "imageclose")
    closeImage = UIImageView(image : imageclose)
    closeImage?.frame = CGRect(x: 10, y: 10, width: 30, height: 30)
    closeImage?.tag = tag
    closeImage?.isHidden = true
    closeImage?.isUserInteractionEnabled = true
    pickImage?.layer.shadowColor = UIColor.white.cgColor
    pickImage?.layer.shadowOffset = CGSize(width: 0, height: 3)
    pickImage?.layer.shadowOpacity = 1
    pickImage?.layer.shadowRadius = 1.0
    pickImage?.clipsToBounds = false

    let longGuetureImage = UILongPressGestureRecognizer(target: self, action: 
   #selector(longPressImage(sender:)))
    longGuetureImage.minimumPressDuration = 0.1
    pickImage?.isUserInteractionEnabled = true
    longGuetureImage.delegate = self
    pickImage?.addGestureRecognizer(longGuetureImage)

    let panGesture = UIPanGestureRecognizer(target: self, action: 
   #selector(handlePanImage(recognizer:)))
    panGesture.delegate = self
    pickImage?.isUserInteractionEnabled = true
    pickImage?.addGestureRecognizer(panGesture)

    let tapGuetureImage = UITapGestureRecognizer(target: self, action: 
   #selector(removeImage(sender:)))
    tapGuetureImage.delegate = self
    closeImage?.addGestureRecognizer(tapGuetureImage)

    let tapGueturemainImage = UITapGestureRecognizer(target: self, action: 
    #selector(selectdragImageTap(_:)))
    tapGueturemainImage.delegate = self
    pickImage?.addGestureRecognizer(tapGueturemainImage)

    let rotate = UIRotationGestureRecognizer(target: self, action: 
   #selector(handlerotateImage(recognizer:)))
    rotate.delegate = self
    pickImage?.addGestureRecognizer(rotate)

    let pinch = UIPinchGestureRecognizer(target: self, action: 
   #selector(handlePinchImage(sender:)))
    pinch.delegate = self
    pickImage?.addGestureRecognizer(pinch)

    pickImage?.dropShadowOff()


    addPickedImage(image: pickImage!, closeimage: closeImage!,imageType : 
  PickedType.image.rawValue,imageData: url.absoluteString)

    pickImage  = nil
    closeImage = nil


   }

调整图片大小时,图片的纵横比可能与视图不一样。有两种方法可以实现您想要实现的目标。

方法一: 调整图像大小以适合视图。这里的宽高比可能与视图不同,因此图像可能会失真。要调整图像大小,请参阅下文,

参考: https://aurvan.github.io/atkit-ios-release/index.html

Class参考: https://aurvan.github.io/atkit-ios-release/helpbook/Extensions/UIImage.html

代码:

import ATKit

let anImage :UIImage = UIImage(named: "DefaultAvatar")!
let aResizedImage :UIImage? = anImage.resize(size: CGSize(width: 100.0, height: 200.0), scaleMode: UIImageScaleMode.aspectFit)

方法二:手动计算图片大小,从视图的水平中心调整关闭按钮。我没有尝试过代码,但是像下面这样的代码应该可以工作,

anImageX = (anImageViewWidth - anImageWidth) / 2.0
anImageY = (anImageViewHeight - anImageHeight) / 2.0

试试这个:

pickImage?.contentMode = .scaleAspectFill
pickImage?.clipsToBounds = true

首先创建一个 clipsToBounds = true 的 UIView,在该视图上应用阴影,然后将您的 pickimage 和按钮添加为该视图中的子视图。因为 clipsToBounds = true 停止在当前视图上放置阴影。