swift - Swift 中的图像调整大小仅适用于某些 iPhone 型号
问题描述
我的 Storyboard 布局上有一个 ImageView,我在这个 ImageView 上放了一些图像。为了保持图像的比例,我创建了一个代码来计算图像比例。
static func getImageScale(_ myImage:UIImageView) -> (width: CGFloat, height: CGFloat) {
let imageViewHeight = myImage.bounds.height
let imageViewWidth = myImage.bounds.width
let imageSize = myImage.image!.size
let myScaledImageHeight = imageViewHeight / imageSize.height
let myScaledImageWidth = imageViewWidth / imageSize.width
return (width: myScaledImageWidth, height: myScaledImageHeight)
}
这就是我使用上面代码的方式:
ImageMarcasHelper.addScaledImageToScreenWithoutMovement(imageStringName: nome_imagem, scaledImageWidth: percentImageScale.width, scaledImageHeigth: percentImageScale.height, view: view)
最后,我称之为:
static func addScaledImageToScreenWithoutMovement(imageStringName imageNameString:String, scaledImageWidth:CGFloat, scaledImageHeigth:CGFloat, view:UIView) {
var xFinal = 0
var scaledImageWidthMultiplied:CGFloat = 0.0
let vc: UIViewController = view.parentViewController!
let vc_name = type(of: vc)
let image = UIImage(named: imageNameString)
print(image!)
let imageView = UIImageView(image: image!)
imageView.isAccessibilityElement = true
imageView.restorationIdentifier = imageNameString
if vc_name == ResenhaMarcasCabecaController.classForCoder() ||
vc_name == ResenhaMarcasMembrosPosterioresController.classForCoder() {
print("ResenhaMarcasCabecaController view used")
xFinal = Int((image?.size.width)!/1.9)
scaledImageWidthMultiplied = (image?.size.width)! * 1
} else {
// identifica todas as outras views como ResenhaMarcasFocinhoController ou ResenhaMarcasPescocoController ou ResenhaMarcasMembrosAnterioresController
print("viewcontroller genenrica usada")
xFinal = 0
scaledImageWidthMultiplied = (image?.size.width)! * scaledImageWidth
}
imageView.frame = CGRect(
x: xFinal,
y: 0,
width: Int( scaledImageWidthMultiplied ),
height: Int( (image?.size.height)! * scaledImageHeigth )
)
view.addSubview(imageView)
}
在某些 iPhone 型号上,图像大小调整效果很好,但在其他型号上计算不正确。
检查下面来自 iPhone 8 和 iPhone 8 Plus 的图像
左侧的红色图像居中,但右侧的红色图像未居中。
我该如何解决?我可以使用另一个代码来修复它,还是我需要在我的代码上进行一些调整?
或者可能是另一种解决方案,有什么方法可以检测屏幕尺寸或尺寸的类型?iPhone 11 Max 和 iPhone Max Pro 也会出现同样的问题。
红色图像以 iPhone 11 Max 为中心,但未以 iPhone Max Pro 为中心。
- - 编辑 - -
@IBOutlet weak var imagemPrincipalCabeca:UIImageView!
我有一个 IBOutlet,其中包含我使用带有 AutoLayout 的 Storyboard 创建的 ImageView,并且我使用此 ImageView 中的图像来获取适用于其他图像的比例。
这是我用来从分配给 ImageView 的 IBOutlet 获取和应用比例的代码
let percentImageScale = ImageMarcasHelper.getImageScale(imagemPrincipalCabeca)
ImageMarcasHelper.addScaledImageToScreenWithoutMovement(
imageStringName: nome_imagem,
scaledImageWidth: percentImageScale.width,
scaledImageHeigth: percentImageScale.height,
view: view)
解决方案
我找出问题所在。
所有计算都在“viewDidLoad”方法中完成。在此方法中,计算不正确,因为视图仍然不知道子视图(容器视图)的正确大小
我更改了要在“viewWillAppear”方法中进行的所有计算。通过这种方式,我能够获得子视图的正确屏幕宽度和高度。
推荐阅读
- google-sheets - 实时更新单元格与谷歌表格中的下一个事件
- python - 如何找到 Python 3.8.7 解释器?
- robotframework - 如何在机器人框架中创建元组列表而不将每一对转换为字符串
- angular - 新数据清除选择
- php - PHP不会将指定的变量发送到我的数据库,但是当我手动填写时会发送数据到数据库
- boolean-logic - 为什么(非真非真或非真非真)出来为真?
- javascript - 是否在夏令时显示正确时间
- logstash - Logstash:如何改变所有文本字段,使其短于 N
- amazon-web-services - AWS 自动扩展所需的容量更改
- r - R ggplot 如何选择具有 2 个值的栅格的颜色