2013-07-28 22 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);