0

ダイアグラムアプリケーションを作成したいのですが、いくつかの形状を作成できます。キャンバス内ですべての形状を移動できます。それを実装するための最良の方法は何ですか?今、私は2つの方法があることを知っています:

  1. UIViewのみを使用して、このUIViewですべての図形を描画します。タッチイベントに達したら、すべてを再描画します。
  2. シェイプごとにUIViewを作成すると、すべてのUIViewがUIEventに個別に応答できます

他に良い方法はありますか?最初のものは複雑すぎます。2番目はパフォーマンスが悪いようですか?

4

1 に答える 1

1

どちらでも機能しますが、それぞれに長所と短所があります。具体的には:

  1. シングルUIView:このアプローチでは、CALayerシェイプごとにを作成し、シェイプを移動するときに独自のヒットテストと指のドラッグを行う必要があります。CALayersは軽量 であるため、多くの形状がある場合(O(N)検索ではなく、インデックス付きルックアップを使用してヒットテストを実行するようにしてください)、このアプローチのパフォーマンスは大幅に向上します。
    • UIViewへの1回の呼び出しで、現在の場所に1回で図形を描画するアプローチをとらないでくださいdrawRect:。これは、特にドラッグ中にシェイプを移動する場合に非常にパフォーマンスが低下します。また、ご指摘のとおり、適切に実装するには非常に複雑です。
  2. UIViewシェイプごとに1つ:このアプローチは、ヒットテストを実行する必要がなく、タッチがタッチされているシェイプに送信されるため、プログラミングが非常に簡単です。このアプローチは、いくつかの形状(私の経験では<30)がある場合にうまく機能します。シェイプの数が多い場合は、フレームレートの問題が発生し始めます。
于 2012-12-29T19:24:08.317 に答える