Ios 在UIImageView中缩放UIImage并使其居中

Ios 在UIImageView中缩放UIImage并使其居中,ios,swift,uitableview,swift3,uiimage,Ios,Swift,Uitableview,Swift3,Uiimage,我需要帮助缩放图像,然后将其重新居中到给定点 因此,当用户单击例如“名字”时:我想在“名字”上缩放图像并使其居中。 以下是我目前的代码: func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { guard let _image = self.image else { return } //Get rect of the image inside

我需要帮助缩放图像,然后将其重新居中到给定点

因此,当用户单击例如“名字”时:我想在“名字”上缩放图像并使其居中。

以下是我目前的代码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    guard let _image = self.image else {
        return
    }


    //Get rect of the image inside the ImageView
    let imageRect   = self.getImageRect()

    // Calculate the scale ratio
    let ratioHeight =  _image.size.height / imageRect.size.height
    let ratioWidth  = _image.size.width / imageRect.size.width
    let aspect = fmin(ratioWidth, ratioHeight)

    // get the coordinates (x,y)
    let xA4 = array[indexPath.row].coords[0]
    let yA4 = array[indexPath.row].coords[1]

    // Convert (x,y) into my current plan
    let x  = xA4 / aspect + imageRect.origin.x
    let y  = yA4 / aspect + imageRect.origin.y

    NSLog("xA4 : \(xA4) ------ x : \(x)")
    NSLog("yA4 : \(yA4) ------ y : \(y)")

    //Apply transformation
        var transform =  CGAffineTransform.identity
        transform = transform.translatedBy(x: imageView.center.x - x , y: imageView.center.y - y)
//        transform = transform.scaledBy(x: 2, y: 2)
        self.imageView.layer.setAffineTransform(transform)

    }
问题是图像缩放正确,但它的中心位置错误,没有达到我给出的点
coord

我错过了什么?为什么缩放不正确?

更新 为了更清楚地了解如何使用,请尝试找出翻译坐标:

  • 获取显示图像的矩形,而不是 imageView
  • 然后找到比例值
  • 将服务器发送的坐标转换为与当前图像大小和位置匹配的坐标
  • 然后将图像重新居中

  • 这是正确的吗?因为它不工作,而且如果我点击两次名字,图像会被翻译两次,通常应该是一次。因为它已经在同一个中心点上。

    在代码2示例中,您每次都用一个新的变换替换变换,因此只应用最后一个变换。尝试以下方法:

    var transform = CGAffineTransform(scaleX: 3, y: 3)
    transform = transform.translatedBy(x: coord.x, y: coord.y)
    self.imageView.layer.setAffineTransform(transform)
    

    还要注意应用这些变换的顺序

    在代码2示例中,每次都要用新的变换替换变换,因此只应用最后一个变换。尝试以下方法:

    var transform = CGAffineTransform(scaleX: 3, y: 3)
    transform = transform.translatedBy(x: coord.x, y: coord.y)
    self.imageView.layer.setAffineTransform(transform)
    

    另外,请注意您应用这些转换的顺序

    到目前为止,它将被最新的转换覆盖,这就是为什么只应用
    translationX

    您必须这样使用:

    var transform =  CGAffineTransform.identity
    transform = transform.scaledBy(x: 3, y: 3)
    transform = transform.translatedBy(x: coord.x, y: coord.y)
    self.imageView.layer.setAffineTransform(transform)
    

    到目前为止,它被最新版本覆盖,这就是为什么只应用
    translationX

    您必须这样使用:

    var transform =  CGAffineTransform.identity
    transform = transform.scaledBy(x: 3, y: 3)
    transform = transform.translatedBy(x: coord.x, y: coord.y)
    self.imageView.layer.setAffineTransform(transform)
    

    谢谢,但在重新定心时仍有问题,但在重新定心时仍有问题,但在重新定心时仍有问题,但在重新定心时仍有问题