因此,当用户点击第一个名字时的例子:我想缩放并将图像置于名字中心。
到目前为止,这是我的代码:
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)
}
那么我错过了什么?为什么不缩放或正确的地方?
更新
为了更清楚我如何使用尝试找出翻译坐标:
这是对的吗?因为它不起作用,如果我在名字上点击两次,图像会翻译两次,通常应该是一次。因为它已经在同一点上集中了。
答案 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)