画像のスケールに関係なく、画像上の位置に常に一致するように、画像の形状に沿ってパスを描画する必要があります。これは、通りの名前と道路が航空写真の上に重ねられた Google マップのハイブリッド ビューのようなものだと考えてください。
さらに、このパスはユーザーの指の動きによって描画されるため、画像のピクセル座標でパスのキーポイントを取得できる必要があります。ユーザーは、パスの場所をより正確に設定するためにズームインします。
私は何とかこのアプローチを使用してそれを機能させることができました:
- タッチ インタラクションを処理し、スケーリング、回転、変換値をフラグに応じて UIImageView または PathsView (以下を参照) に配信する CanvasView と呼ばれるカスタム UIView を作成します。
-基本イメージを保持する UIImageView を作成します。これは CanvasView の子として設定されます
- 2D パス ジオメトリを追跡し、カスタム drawRect でそれ自体を描画する PathsView というカスタム UIView を作成します。これは、UIImageView の子として設定されます。
階層: CanvasView -> UIImageView -> PathsView
このように、deliverToImageOrPaths が YES の場合、指のジェスチャーは UIImageView とその子 PathsView の両方を変換します。deliveryToImageOrPaths が NO の場合、ジェスチャは PathsView のみに影響を与え、ジオメトリを変更します。ここまでは順調ですね。
質問: 私が抱えている問題は、ベース UIImageView を (その .transform プロパティを介して) スケーリングすると、PathsView がエイリアシング アーティファクトでスケーリングされることです。drawRect は PathsView でまだ呼び出されていますが、元のバッファー サイズを使用して描画を実行してから補間していると思います。
この問題を解決するにはどうすればよいですか? これらの機能を実装するためのより良い方法はありますか?
PS: PathsView レイヤー クラスを、levelsOfDetailBias 4 と levelsOfDetail 4 を使用して CAtiledLayer に変更してみました。これにより、エイリアシングの問題はある程度解決されますが、レンダリングが許容できないほど遅くなります。