2

これが私が得たビューです。layer viewユーザーのタッチを検出する とimage view、画像を表示する を取得しました。のlayer view上にあるカバーimage viewです。のimage view画像はアスペクトフィットです。したがって、比率が失われることはありません。私のlayer viewタッチでは100, 240、それはlayer view座標ですが、画像の座標ではありません。layer viewの座標を画像の座標に変換する方法を知りたいです。この例では、画像サイズは 180*180 である可能性があるため、 の座標layer viewimageです60, 90

ありがとう。ここに画像の説明を入力

4

2 に答える 2

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 で割ることによって、原点を計算します。

フレームワークをインポートすることを意味する場合でも、不要な場合はできるだけコードを書かないようにしています。インポートすると、1 行のコードでスケーリングされた四角形を実際に計算するために使用できるAVFoundationメソッドが得られます。AVMakeRectWithAspectRatioInsideRect

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

どちらの方法を使用する場合でも、タッチしたポイントをスケーリングされた画像の原点に単純に変換します。

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

于 2013-07-28T07:54:55.937 に答える
0

自分で計算する必要があります。画像の縦横比を計算し、画像ビューの境界の縦横比と比較します。

この質問を見てください: 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);
于 2013-07-28T09:05:00.100 に答える