2013-07-28 18 views
1

这里是我得到的视图中,我有一个layer view,检测用户的触摸;以及image view,其示出了图像。 layer view覆盖在image view之上。 image view的形象是方面适合。所以,它不会失去这个比例。如果在我的layer view触摸100, 240,它是一个layer view坐标,但不是图像的坐标。我想知道如何将layer view的坐标转换为图像的坐标。在此示例中,图像大小可能为180 * 180,因此image中的layer view中的坐标为60, 90如何找回iOS上图像的真实位置?

谢谢。 enter image description here

+0

“的观点后,这是一个很大的UIImageView,并且图像方面的配合。” - 什么? – 2013-07-28 06:24:50

+0

什么是100,240?该图像是在你的性别(显然是全屏)图像视图。目前还不清楚你想要计算什么。 – Wain

+0

对不起,更新了这个问题。 – DNB5brims

回答

4

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

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

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

CGPoint imageViewTouchPoint = [layerView convertPoint:接触点fromView:ImageView的];

CGPoint imageViewTouchPoint = [ImageView的convertPoint:接触点toView:layerView];

无论是一个人应该工作。

编辑 - 我现在意识到,这是只有在UIImageView具有相同的帧作为UIImage,你说可能不会,由于UIViewContentModeScaleAspectFit财产。

在这种情况下,除非我弄错了,否则图像帧将在UIImageViewdrawRect:方法内计算,而不是一个被设置的属性。这意味着你必须自己计算。

肯定会从上面的方法之一得到imageViewTouchPoint(以防万一你想在不是全屏尺寸的UIImageView上使用相同的逻辑)。

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

我想如果这是不必要的编写尽可能少的代码越好,即使这意味着进口的框架。如果您导入AVFoundation,您将得到一个方法AVMakeRectWithAspectRatioInsideRect,您可以使用该方法实际计算一行代码中的缩放矩形。

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

哪种方法你使用,你会那么简单地缩放图像原点翻译你的触碰点:

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

+0

是的,但问题是,我想有'image'的意思,而不是'imageView'。 – DNB5brims

+0

啊,现在我明白了。在这种情况下,我几乎可以肯定你必须手动计算这个值,因为在渲染时图像大小不一,所以'UIImageView'不会在任何地方存储这些信息。 –

+0

我更新了我的答案,提供了一种计算方法。 –

0

你必须自己做数学。计算图像的宽高比并与图像视图的宽高比进行比较。

看这个问题:How to Get Image position in ImageView

搜索更多后,得到了一个黑客:

CGSize imageInViewSize = [photo resizedImageWithContentMode:UIViewContentModeScaleAspectFit bounds:imageView.size interpolationQuality:kCGInterpolationNone].size; 


CGRect overlayRect = CGRectMake((imageView.frame.size.width - imageInViewSize.width)/2, 
             (imageView.frame.size.height - imageInViewSize.height)/2, 
             imageInViewSize.width, 
             imageInViewSize.height); 

NSLog(@"Frame of Image inside UIImageView: Left:%f Top:%f Width:%f Height:%f \n", overlayRect.origin.x, overlayRect.origin.y, overlayRect.size.width, overlayRect.size.height);