この質問を正しく理解している場合、現在レイヤーの座標系に関連しているポイントを取得し、それを画像ビューの座標系に変換しますか?
その場合、これを行うにはいくつかの方法があります。
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);