2

人体を表す画像の特定の領域に点をプロットする必要があるプロジェクトに取り組んでいます。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 によって与えられた両方のスケール係数で与えられた数式を試しましたが、運がありませんでした。

4

3 に答える 3

0

私の問題の根本は、UIImageView の 4 つの側面をコンテナー ビューに固定したことです。デバイスの幅が変更されると、画像は正しくスケーリングされますが、グラフィックが「引き伸ばされ」ます。これにより、たとえば、ヘッドの幅が増加しました。画像の幅をロックすることでこれを解決したので、元の画像から得た座標はデバイスに関係なくそのまま残ります。

これを読んでいる人にとっては、解決策とは思えないかもしれませんが、締め切りが非常に厳しいので、これを採用する必要があります。複数のデバイス シミュレータでテストしましたが、動作します。将来これを再検討する必要があるかもしれませんが、今のところは機能しています。

また、この質問の回答を使用してコードを作り直しました: create a clickable body diagram

于 2018-11-06T12:39:26.777 に答える