1

ディスプレイ(600x1400)よりも大きい画像を持つ単純なUIImageViewがあります。画像は [縦横比に合わせる] で始まるため、UIImgageView レポートの境界は 320x750 で、ディスプレイよりも大きくなりますが、問題ありません。拡大縮小して配置したい画像の元の寸法(600x1400)に対するポイント(300、150)を知っています。コア アニメーションを介して位置とスケール (ズーム、変換) を処理する基本的なアニメーションをセットアップすると、スケールは発生しますが、目的のポイントに到達することはありません。代わりに、すぐに変換されるスケールに基づいてポイントを計算する必要があるようです。

私が見逃している明らかなものはありますか?convertPoint:toView を使用してみましたが、指定したのと同じポイントが常に返されます。

4

1 に答える 1

0

はい、ビューの原点を設定するときは、そのスーパービューの座標空間に設定しています。スーパービューはサブビューのスケールを認識していないため、画像のスケーリングされたサイズに相対的な座標に移動する必要がある場合は、一致するように座標をスケーリングする必要があります。これを行うための計算は簡単ですが、CGPointApplyAffineTransform () 関数を使用して、変換プロパティを介して UIImageView をスケーリングし、座標に適用するために使用した可能性のある CGAffineTransform を取得できます。(また、座標 0,0 は iPhone の左上隅にあることを覚えておいてください。) UIImageView を scale to fit に設定すると、transform プロパティを介してスケーリングが行われるかどうかはわかりませんが、簡単に構築できます。ビューの現在のスケールに一致するアフィン変換。

ただし、メモリを節約してパフォーマンスを向上させるために、画像をより低い解像度にリサンプリングすることをお勧めします。600x1400 は、iPhone で放り投げるにはかなり大きな画像です。 この投稿には、UIImage をスケーリングする方法に関するヒントがいくつかあります。画像に既知の倍率を適用する場合、その倍率を目的の座標の X および Y コンポーネントに単純に適用できます。

于 2009-02-16T04:00:12.383 に答える