首页 > 解决方案 > 将文本视图添加到 iPhone X 上的图像“挤压”输出图像

问题描述

我目前有一段代码试图在图像上添加一个文本视图,最终目标是用覆盖的文本保存新图像。这是执行此操作的代码:

class func addText(label: UITextView,imageSize: CGSize, image: UIImage) -> UIImage {
    let scale = UIScreen.main.scale
    UIGraphicsBeginImageContextWithOptions(CGSize(width: imageSize.width, height: imageSize.height), false, scale)
    let currentView = UIView.init(frame: CGRect(x: 0, y: 0, width: imageSize.width, height: imageSize.height))
    let currentImage = UIImageView.init(image: image)
    currentImage.frame = CGRect(x: 0, y: 0, width: imageSize.width, height: imageSize.height)
    currentView.addSubview(currentImage)
    currentView.addSubview(label)
    currentView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return img!
}

它被称为如下(图像只是手机相机拍摄的标准1920x1080图像):

self.imageToEdit.image = UIImage.addText(label: textView, imageSize: UIScreen.main.bounds.size, image: self.imageToEdit.image!)

这在我测试 iPhone 6s 时效果很好,但是当我在 iPhone X 上测试时,它会“挤压”图像的两侧,因此面部和其他特征在addText.

我有一种预感,这是由于图像通过 iPhone X 的凹槽向上延伸,导致某种类型的缩放/纵横比填充,但我不确定从哪里开始寻找。

有谁知道如何阻止 iPhone X 中发生“挤压”(我也猜想这发生在所有其他有缺口的 iPhone 型号中)

谢谢。

标签: iosswiftuikit

解决方案


刚刚想通了!

我需要包括这一行:

currentImage.contentMode = .scaleAspectFill

在我的addText功能中。

因为我要返回一个新UIImageView视图,所以我需要确保它具有与原始视图相同的内容模式。


推荐阅读