如何找回iOS上图像的真实位置?

DNB*_*ims 2 objective-c uiview uiimageview

这是我得到的视图,我有一个layer view,检测用户触摸,和a image view,显示图像.该layer view保险是否会在顶部image view.这个image view图像是方面适合的.所以,它不会失去这个比例.如果在我的layer view触摸中100, 240,它是一个layer view坐标,而不是图像的坐标.我想知道如何将layer view坐标转换为图像的坐标.在这个例子中,图像大小可以是180×180,因此,坐标的layer viewimageIS 60, 90.

谢谢.在此输入图像描述

Kev*_*Low 5

如果我正确理解了这个问题,你想得到一个当前与图层坐标系相关的点,并将其转换为图像视图的坐标系?

在这种情况下,有几种方法可以做到这一点.

最简单的是使用convertPoint:fromView:convertPoint:toView:

CGPoint imageViewTouchPoint = [layerView convertPoint:touchPoint fromView:imageView];

CGPoint imageViewTouchPoint = [imageView convertPoint:touchPoint toView:layerView];

任何一个都应该工作.

编辑 - 我现在意识到,只有当它UIImageView具有相同的框架时UIImage,由于UIViewContentModeScaleAspectFit属性,你说它可能没有.

在这种情况下,除非我弄错了,否则图像框架在UIImageView drawRect:方法内部计算,而不是设置的属性.这意味着您必须自己计算.

绝对可以imageViewTouchPoint从上面的方法之一获得(以防万一你想在UIImageView不是全屏大小的情况下使用相同的逻辑).

然后,您需要计算缩放的图像帧.有几种方法可以做到这一点.有些人蛮力并根据图像的哪一侧更长时间手动计算,然后确定哪一侧应该缩放.然后,他们通过使图像居中并减去图像和图像视图的边并除以2来计算原点.

如果没有必要,我喜欢编写尽可能少的代码,即使这意味着导入框架.如果导入,AVFoundation您将获得一个方法AVMakeRectWithAspectRatioInsideRect,您可以使用该方法在一行代码中实际计算缩放的矩形.

CGRect imageRect = AVMakeRectWithAspectRatioInsideRect(image.size,imageView.frame);

无论使用哪种方法,您都可以使用缩放的图像原点简单地翻译您的触摸点:

CGPoint imageTouchPoint = CGPointMake(imageViewTouchPoint.x - imageRect.origin.x,imageViewTouchPoint.y - imageRect.origin.y);