5

私はCocoaを初めて使用し、経験豊富なCocoa-ersからのアプリケーションに関するちょっとしたアドバイスを探しています。 

オブジェクトがキャンバスに描画/ドラッグされる基本的なOmniGraffleスタイルのアプリを作成しています。オブジェクトをキャンバスに配置した後、オブジェクトを選択して、プロパティ(塗りつぶしの色、線の色/幅など)を変更したり、サイズを変更したり、新しい位置に移動したりできます。

ウォームアップするために、カスタム上でマウスによって描画されるオブジェクト(円、長方形など)を作成しNSView、オブジェクトをコレクションに追加し、NSArrayコレクションのコンテンツをビューにレンダリングする基本的な描画アプリを作成しました。 。この流れを続けることもできますが、オブジェクト選択の検出、zインデックスの解決、フォーカスの強調表示、ドラッグハンドルなど、関連するすべてのレンダリングのサポートを追加する必要があります。また、各サイクルですべてのオブジェクトをレンダリングすることは、ひどく無駄に思えます。

より良いアプローチは、軽量のビューオブジェクトをキャンバスにドロップして、マウスイベントを検出したり、自分自身とフォーカスリングを描画したりできるようにすることです。しかし、NSViewこれらの特性を備えたオブジェクトのように見えますが、それが多くの荷物を伴う重量級のコンポーネントであるということについて、ウェブ上で多くのおしゃべりを目にします。私はNSCellsに出くわし、それらを読みましたが、それらが正しい選択肢であるかどうかはわかりません。

助言がありますか?あなたが私を正しい方向に動かすことができれば、私はそれを大いに感謝します。

4

1 に答える 1

3

最適化の最初のルール:最初にそれを行わないでください。

形状ごとのカスタムNSViewは、私にはほぼ正しいように聞こえます。形状ごとに異なるサブクラスが必要かどうかは、あなた次第です。最初は、単一の汎用シェイプビュークラスと、ベジエパスとして自分自身を記述できるシェイプから始めますが、それを保持することについてはそれほど厳密ではありません。簡単にできる場合は変更してください。それを実装するだけですが、それはあなたにとって理にかなっています。

次に、機能するようになったら、プロファイルを作成します。できるだけ多くの形を作ります。その後、もっと作ります。ポリカウントの多い形状。交差点。塗り、線、影、グラデーション。おそらく、ストレッサーごとに個別のドキュメントを作成する必要があります。ユーザーレベルで何が遅いかに注意してください。次に、Instrumentsでアプリを実行し、なぜ遅いのかを調べます。

たぶん、ビューは間違った解決策であることが判明するでしょう。CALayersを調べることを忘れないでください。ただし、試して測定するまでは、遅いものを除外しないでください。

于 2011-08-27T02:37:47.043 に答える