ios - 如何根据 UIImage 大小调整 UIImageView 的大小并适合屏幕的宽度
问题描述
我有这个代码片段:
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
andimageHeight
时,你最终会得到一个比原来更小的 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
}
let 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
}
推荐阅读
- c# - winform 文本框不显示文本
- flutter - 如何防止 Flutter Web 使用 Canvaskit?
- phpmyadmin - 带有日文汉字字符的 csv 文件未在 mysql 数据库中导入
- variables - 想在一行代码上从 split() 分配多个变量
- python - Python int 太大而无法转换为 SQLite INTEGER
- wordpress - 从 Integromat 在 Wordpress 中分配自定义分类
- android-studio - 我无法使用 Android stduio 制作 Wear OS 项目
- karate - 从桌面应用程序切换到现有的 chrome 浏览器
- node.js - 如何从 Express 添加 firebase 电话号码 otp 身份验证 API
- caching - 如果将动态数据槽放入 amp-ad 中,Google AMP 缓存能否正常工作