ピアノの鍵盤が内部に描かれたカスタムビューがあります。各キーは個別の呼び出しとして描画されるため、再描画が必要なキーのみを描画できます。ビューはマルチタッチをサポートしているため、一度に複数のキーを押し続けることができます。
各キーの描画には多少コストがかかるため、ビュー全体の再描画(顕著な遅延が発生する)を回避するために、ビューでタッチが検出されるたびに特定の領域をsetNeedsDisplayに渡します。
複数のタッチを処理するために、受信したタッチのセットを繰り返し処理し、各タッチがいずれかのキー内にあるかどうかを確認し、含まれている場合は更新して、そのキーの長方形でsetNeedsDisplayを呼び出します。つまり、setNeedsDisplayは、1つの関数で複数回呼び出されますが、毎回異なるrectで呼び出されます。
私が期待した動作は、drawRectが異なるダーティ領域で複数回呼び出されることでしたが、左端と右端のキーを同時に押すと、左端だけでなく、ビュー全体が再描画されるようです。および右端のキー(のように、その間のすべてのキーが不必要に再描画されます)。
私が望むことを達成するために私は何ができますか?2つの汚れたキーの間にあるすべてのキーではなく、触れたキーだけを描画したいと思います。