首页 文章

如何在ios swift中将UIImage比例调整为视图?

提问于
浏览
-2

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

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

并且关闭按钮应该是左上角,这里当我从图像选择器中选择图像时,关闭按钮图像的任何其他位置设置为正确地基于风景或肖像 . 这是我使用的代码:

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


   }

enter image description here

2 回答

  • 1

    试试这个:

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

    首先使用clipsToBounds = true创建UIView,在此视图上应用阴影,然后在此视图中将pickimage和按钮添加为subView . 因为clipsToBounds = true会停止在当前视图上删除阴影 .

  • 0

    调整图像大小时,图像的宽高比可能与视图不同 . 您尝试实现的目标有两种方法 .

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

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

    课程参考: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)
    

    Approach 2: 手动计算图像大小并从视图的水平中心调整关闭按钮 . 我没有尝试过代码,但下面的代码应该可以工作,

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

相关问题