在UIImageView内部缩放并以UIImage为中心

时间:2017-10-10 14:27:04

标签: ios swift uitableview swift3 uiimage

我需要帮助来缩放图像,然后将其重新定位到给定点。
enter image description here

因此,当用户点击第一个名字时的例子:我想缩放并将图像置于名字中心。

到目前为止,这是我的代码:

elseif

问题在于图像是否正确缩放,但它在错误的位置重新居中,而不是我给出的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) }

那么我错过了什么?为什么不缩放或正确的地方?

更新

为了更清楚我如何使用尝试找出翻译坐标:

  1. 获取我显示图像的矩形而不是 ImageView的。
  2. 然后找到比例值
  3. 将服务器发送的坐标转换为与我的curent imageSize和position匹配的坐标。
  4. 然后重新显示图像
  5. 这是对的吗?因为它不起作用,如果我在名字上点击两次,图像会翻译两次,通常应该是一次。因为它已经在同一点上集中了。

2 个答案:

答案 0 :(得分:1)

在您的CODE 2示例中,您每次都使用新的替换transform,因此仅应用最后一个转换。尝试类似:

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

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

答案 1 :(得分:1)

截至目前,它已超越最新版本,这就是为什么只有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)