人体を表す画像の特定の領域に点をプロットする必要があるプロジェクトに取り組んでいます。Interface Builder で、メイン ビューの垂直方向の中央のほとんどを占めるコンテナー UIView をセットアップしました。そのコンテナ ビューに UIImageView を配置し、グラフィックを IB に設定しました。グラフィックは、UIImageView とコンテナー UIView の両方よりもはるかに大きく、より具体的には高くなっています。UIImageView の ContentMode が AspectFit に設定されているのは、画像がコンテナよりも大きく表示されないようにするためです。
このコードは、ユーザーのタップが何かを意味する領域であるいくつかの CGRect インスタンスを作成します。ユーザーがコンテナー ビューをタップすると、ポイントがいずれかの領域内にあるかどうかを判断するためにコードが使用され、領域内にある場合は、その領域の中心にドットが描画されます。
問題は、特定のシミュレーターでアプリを実行すると、領域の四角形が画像の正しい場所にないことです。たとえば、iPhone X でアプリを実行すると、頭の四角形の領域が適切に表示されます。iPhone XR でアプリを実行すると、四角形の領域が頭の左側にずれます。
座標を使用して、たとえば人間の頭が画像内にある場所に基づく領域の四角形を定義しています。画像の ContentMode の AspectFit により、アスペクトを維持するために画像がスケーリングされる可能性が最も高いため、これは正しい方法ではないように感じます。
要点は、画像がどのように拡大縮小されても、長方形を適切な場所とサイズにしたいということです。私のやり方が理にかなっているのかどうかわからないので、これを行うためのより良い方法を提供するいくつかの提案が来ることを願っています.
更新 1 : UIImageView は周囲の UIView に固定されているため、幅と高さはコンテナーと同じ大きさです。画像は UIImageView よりも細いため、画像は中央に表示されます。添付の画像では、紫色の背景は UIImageView であり、最上位の UIView の背景色を示しています。
更新 2 :幅と高さの両方のスケールを確認したところ、それらが異なることがわかりました。幅の倍率は 1.36565656565 で、高さの倍率は 2.104 です。Sweeper によって与えられた両方のスケール係数で与えられた数式を試しましたが、運がありませんでした。