如何根据 UIImage 大小调整 UIImageView 的大小并适合屏幕的宽度
How to resize a UIImageView based on UIImage size and fit the screen's width
我有这个代码片段:
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在屏幕中央非常小,如下图:
我想做的是让我的originalImageView
宽度变大,并相应地保持其比例,就像下面的模型一样,可以吗?
我认为当 imageView.image!.size.width
的值大于 imageView.bounds.size.width
或高度值时会出现问题。
这将导致 widthRatio
或 heightRatio
的值小于 1。
并且当您的 scale
小于 1 并乘以您的 imageWidth
和 imageHeight
时,您最终会得到比原来更小的 UIImageView。
我猜从像 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
}
var 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
}
我有这个代码片段:
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在屏幕中央非常小,如下图:
我想做的是让我的originalImageView
宽度变大,并相应地保持其比例,就像下面的模型一样,可以吗?
我认为当 imageView.image!.size.width
的值大于 imageView.bounds.size.width
或高度值时会出现问题。
这将导致 widthRatio
或 heightRatio
的值小于 1。
并且当您的 scale
小于 1 并乘以您的 imageWidth
和 imageHeight
时,您最终会得到比原来更小的 UIImageView。
我猜从像 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
}
var 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
}