Ios 如何从UIImageView中删除边框/阴影?

Ios 如何从UIImageView中删除边框/阴影?,ios,swift,uiimageview,Ios,Swift,Uiimageview,我一直在使用CIQRCodeGenerator生成二维码,效果非常好: 但是当我调整UIImageView的大小并再次生成 @IBAction func sizeSliderValueChanged(_ sender: UISlider) { qrImageView.transform = CGAffineTransform(scaleX: CGFloat(sender.value), y: CGFloat(sender.value)) } 我有时会在图像周围看到一个奇怪的边

我一直在使用CIQRCodeGenerator生成二维码,效果非常好:

但是当我调整UIImageView的大小并再次生成

  @IBAction func sizeSliderValueChanged(_ sender: UISlider) {
    qrImageView.transform = CGAffineTransform(scaleX: CGFloat(sender.value), y: CGFloat(sender.value))
  }
我有时会在图像周围看到一个奇怪的边框/阴影:

如何防止它始终出现或完全删除它?

我不知道它到底是什么,一个边框,一个dropShadow或一个Mask,因为我是Swift/iOS新手

提前谢谢

另外,我没有发布任何二维码生成代码,因为这是一个非常简单的模板,可以在很多教程中找到,但是如果你需要,请告诉我

编辑:
编码以生成二维码图像

private func generateQRCode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)

    guard let filter = CIFilter(name: "CIQRCodeGenerator") else {
      return nil
    }

    filter.setValue(data, forKey: "inputMessage") 

    guard let qrEncodedImage = filter.outputImage else {
      return nil
    }

    let scaleX = qrImageView.frame.size.width / qrEncodedImage.extent.size.width
    let scaleY = qrImageView.frame.size.height / qrEncodedImage.extent.size.height
    let transform = CGAffineTransform(scaleX: scaleX, y: scaleY )

    if let outputImage = filter.outputImage?.applying(transform) {
      return UIImage(ciImage: outputImage)
    }

    return nil
  }
按下按钮的代码

  @IBAction func generateCodeButtonPressed(_ sender: CustomButton) {
    if codeTextField.text == "" {
      return
    }

    let newEncodedMessage = codeTextField.text!
    let encodedImage: UIImage = generateQRCode(from: newEncodedMessage)!
    qrImageView.image = encodedImage
    qrImageView.transform = CGAffineTransform(scaleX: CGFloat(sizeSlider.value), y: CGFloat(sizeSlider.value))


    qrImageView.layer.minificationFilter = kCAFilterNearest
    qrImageView.layer.magnificationFilter = kCAFilterNearest
  }

我想问题在于图像(png)文件,而不是UIImageView。尝试使用另一个图像,我希望它会工作

如果没有用于为图像视图生成图像的代码,就有点难以确定,但这看起来像是一个调整大小的伪影。CIImage在二维码边缘外可能是黑色或透明的,当图像视图大小与图像的预期大小不匹配时,边缘变得模糊,图像边界外的图像或图像视图的背景色开始溢出。可以通过将图像视图层的缩小/放大过滤器设置为“最近邻”来修复此问题,如下所示:

imageView.layer.minificationFilter = kCAFilterNearest
imageView.layer.magnificationFilter = kCAFilterNearest

通过查看添加的代码进行更新当前正在两次调整图像大小,首先调用
应用(变换)
,然后在图像视图本身上设置变换。我怀疑第一次调整大小会增加模糊度,我之前建议的缩小/放大过滤器无法解决这一问题。尝试将generateQRCode缩短为:

private func generateQRCode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)

    guard let filter = CIFilter(name: "CIQRCodeGenerator") else {
        return nil
    }

    filter.setValue(data, forKey: "inputMessage")

    if let qrEncodedImage = filter.outputImage {
        return UIImage(cgImage: qrEncodedImage)
    }

    return nil
}

我认为这里的问题是,您尝试将其调整为“非方形”(因为您的
scaleX
并不总是与
scaleY
相同),而QR码总是方形的,因此两侧应该具有相同的比例因子,以获得非模糊图像

比如:

let scaleX = qrImageView.frame.size.width / qrEncodedImage.extent.size.width
let scaleY = qrImageView.frame.size.height / qrEncodedImage.extent.size.height
let scale = max(scaleX, scaleY)
let transform = CGAffineTransform(scaleX: scale, y: scale)

将确保您有“无边框/无模糊/正方形”
UIImage

您好,您的解决方案不起作用,但我理解不查看一些代码就很难进行故障排除,我正在发布用于生成图像的代码作为编辑。希望有帮助!谢谢你的回复。啊,我想我现在明白了。更新了答案。你好,诺亚,谢谢你的回答。我必须报告,它不起作用。这实际上是scaleX和scaleY公式的一个问题,如果我将它们设置为20.0,则每次变换都能完美工作,但显然,我们的想法是完全避免使用任意数字。尽管如此,还是非常感谢你!我会试试看,信不信由你,这个问题在这么长时间后依然存在。谢谢你的回复!