如何将 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 停止在当前视图上放置阴影。
我正在尝试调整 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 停止在当前视图上放置阴影。